Dynamic SQL to move SQL Server TempDB Data and Log Files to different directories

The following dynamic SQL script helps you to move TempDB data and log files to different directories.

Before running the script, enter the values for the parameters @NewTempDBDataDir for the destination data file directory and @NewTempDBLogDir for TempDB new log file directory.

/*
******************************************************************
Specify the new directory name in the variable @NewTempDBDir
******************************************************************
*/
DECLARE @NewTempDBDataDir VARCHAR(1000)
SET @NewTempDBDataDir=’J:\MSSQL\Data\’
DECLARE @NewTempDBLogDir VARCHAR(1000)
SET @NewTempDBLogDir=’J:\MSSQL\Logs\’

DECLARE @TempDBFiles TABLE
(
id INT IDENTITY(1, 1) PRIMARY KEY,
[file_id] INT,
[Type] bit,
[name] VARCHAR(20),
[physical_name] VARCHAR(1000),
[extract_physical_name] VARCHAR(100) NULL,
sqlscript VARCHAR(max) NULL
)

INSERT INTO @TempDBFiles
([file_id],
[name],
[Type],
[physical_name])
SELECT file_id,
NAME,
[Type],
physical_name
FROM tempdb.sys.database_files

–Select * from @TempDBFiles

DECLARE @i INT
DECLARE @String NVARCHAR(max),
@SQL NVARCHAR(max),
@SQLLogs NVARCHAR(MAX)

SELECT @i = Count(*)
FROM @TempDBFiles

WHILE ( @i > 0 )
BEGIN
SELECT @String = physical_name
FROM @TempDBFiles
WHERE file_id = @i

UPDATE @TempDBFiles
SET [extract_physical_name] =
Reverse(Substring(Reverse(@String), 0,
Charindex(‘\’,
Reverse @String),0)))
WHERE file_id = @i

–select * from @TempDBFiles where file_id=@i
SELECT @SQL = ‘ALTER DATABASE [Tempdb] MODIFY FILE ( NAME=’
+ NAME + ‘, FILENAME= ”’ + @NewTempDBDataDir
+ extract_physical_name + ”’);’
FROM @TempDBFiles
WHERE file_id = @i and [Type]=0

UPDATE @TempDBFiles
SET sqlscript = @SQL
WHERE file_id = @i and [Type]=0

SELECT @SQLLogs = ‘ALTER DATABASE [Tempdb] MODIFY FILE ( NAME=’
+ NAME + ‘, FILENAME= ”’ + @NewTempDBLogDir
+ extract_physical_name + ”’);’
FROM @TempDBFiles
WHERE file_id = @i and [Type]=1

UPDATE @TempDBFiles
SET sqlscript = @SQLLogs
WHERE file_id = @i and [Type]=1

SET @i=@i – 1
END

SELECT name, extract_physical_name, sqlscript
FROM @TempDBFiles

The script generates the ALTER DATABASE statement that you can execute on the SQL Server instance for which you want to move the TempDB files (data and log ) to different drives.

By Callum

Callum is a news writer at DBBlogger, delivering timely updates and concise analysis across a range of global and digital topics.