To Move Mdf and Ndf Files of all User Databases
database #database#user
DECLARE @datapath NVARCHAR(260) = 'SQLdata';
DECLARE @logpath NVARCHAR(260) = 'SQLLogs';
DECLARE @Statements NVARCHAR(MAX);
WITH DatabaseFilesCTE AS (
SELECT d.name AS DatabaseName,
f.name AS LogicalName,
RIGHT(f.physical_name, CHARINDEX('\', REVERSE(f.physical_name)) - 1) AS FileName,
f.type_desc AS TypeofFile,
CASE
WHEN f.type_desc = 'ROWS' THEN @datapath
WHEN f.type_desc = 'LOG' THEN @logpath
ELSE '' -- Handle other file types if needed
END AS NewPath
FROM sys.master_files f
INNER JOIN sys.databases d ON d.database_id = f.database_id
WHERE d.name NOT IN ('master', 'model', 'msdb', 'tempdb')
AND f.type_desc IN ('ROWS', 'LOG')
)
SELECT
@Statements = COALESCE(@Statements + CHAR(13) + CHAR(10), '') +
'ALTER DATABASE [' + DatabaseName + '] MODIFY FILE (NAME = [' + LogicalName + '], FILENAME = ''' + NewPath + '\' + FileName + ''')'
FROM
DatabaseFilesCTE;
PRINT @Statements;