Réindexation des bases d’une instance SQL Server Express

Réindexation des bases d'une instance SQL Server ExpressJe pensais aujourd’hui former mon stagiaire à SQL Server et, à ma grande surprise, nous avons en fait travaillé sur la version Express du moteur de bases de données relationnelle. Et donc, pas de SSIS, pas de plan de maintenance et pas d’agent SQL Server pour planifier les jobs. Pour la réindexation des tables, nous avons dû passer par des commandes systèmes et la commande sqlcmd.exe qui est fournie en installant SSMS sur le serveur.

Le script Transact-SQL reindexation.sql

Le script présenté ci-dessous charge le nom des tables et des schémas associés dans un curseur, à partir duquel, après reconstitution de la commande SQL, nous exécutons la commande de réindexation des tables DBCC DBREINDEX.

DECLARE cursorDb CURSOR FOR 
	SELECT 
		t.name nom_table,s.name nom_schema 
	FROM 
		sys.tables AS t 
		INNER JOIN sys.schemas AS s ON t.schema_id=s.schema_id;
DECLARE @table VARCHAR(1024);
DECLARE @schema VARCHAR(1024);
DECLARE @sql VARCHAR(1024);
OPEN cursorDb;
FETCH NEXT FROM cursorDb INTO @table, @schema;
WHILE @@FETCH_STATUS = 0  
BEGIN  
	SET @sql='DBCC DBREINDEX (''['+@schema+'].['+ @table + ']'')  WITH NO_INFOMSGS';
	-- PRINT @sql;
	EXECUTE (@sql);
	FETCH NEXT FROM cursorDb INTO @table,@schema;
END;
CLOSE cursorDb;
DEALLOCATE cursorDb;
GO

Le fichier batch Windows reindexation.cmd

Le batch Windows récupère la liste des bases de données installées au niveau de la boucle for, puis exécute le script défini ci-dessus nommé d:\reindexation.sql dans le code.

@echo off
SET PATH=%PATH%;"C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn"
for /f "tokens=*" %%d in ('sqlcmd -E -Q "SELECT name FROM sys.databases;" -h -1 -W ^|find /V "("') do (
	sqlcmd -E -S PORTABLE -d %%d -i d:\reindexation.sql
)
exit

Base de données  / SQL Server Express