SQL Server : déplacer les fichiers du tempdb avec un bloc T-SQL

Le Transact-SQL est un langage de programmation à part entière avec ses types de données, variables, structures conditionnelles et répétitives. Les langages qui s’appliquent aux moteurs de bases de données incluent la prise en charge des curseurs, c’est-à-dire des espaces mémoires qui nous permettent de prendre en charge des tableaux de données issus d’instructions SELECT.

SQL Server : déplacer les fichiers du tempdb avec un bloc T-SQL

Pour visualiser l’emplacement des fichiers associés au tempdb, exécutez cette requête d’une vue appartenant au dictionnaire de données de SQL Server :

SELECT name,physical_name FROM tempdb.sys.database_files;
GO

A partir de ce curseur, nous pourrons récupérer les champs name et physical_name de la vue passée en curseur et les affecter aux variables @strLogical et @strPhysical.

Le bloc Transact-SQL ci-dessous déplace les fichiers dans D:\MSSQL16.INSTANCE_DENIS\MSSQL\TEMPDB\, sur lequel vous devrez donner les droits au compte qui lance le process SQL Server, NT Service\MSSQLServer dans l’exemple ci-dessous.

DECLARE @strLogical VARCHAR(7), @strPhysical VARCHAR(260),@strSql VARCHAR(MAX), @str;
DECLARE  cursTempdb CURSOR FOR 	SELECT name,physical_name FROM tempdb.sys.database_files;
OPEN cursTempdb;
FETCH NEXT FROM cursTempdb INTO @strLogical,@strPhysical;
USE master;
WHILE @@FETCH_STATUS=0
BEGIN
	SET @strPhysical=RIGHT(@strPhysical,CHARINDEX('\',REVERSE(@strPhysical))-1);
	SET @strSql='ALTER DATABASE tempdb MODIFY FILE (name='+@strLogical+',FILENAME=''D:\MSSQL16.INSTANCE_DENIS\MSSQL\TEMPDB\'+@strPhysical+''')';
	-- PRINT @strSql;
	EXEC(@strSql);
	FETCH NEXT FROM cursTempdb INTO @strLogical,@strPhysical;
END;
CLOSE cursTempdb;
DEALLOCATE cursTempdb;
GO

MSSQL /