La procédure stockée système sp_MSforeachdb permet d’exécuter un script sur toutes les bases de données d’une instance. Le nom de la base correspond au point d’interrogation. Dans l’exemple ci-dessous, on lance une recherche d’objet par le nom dans toutes les bases de données utilisateur.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
DECLARE @SqlExec VARCHAR(MAX), @ObjectName VARCHAR(100) = 'Address' DECLARE @Result AS TABLE (DatabaseId INT, DatabaseName SYSNAME, SchemaName SYSNAME, ObjectName SYSNAME) SET @SqlExec = ' IF DB_ID(''?'') BETWEEN 5 AND 32766 AND DATABASEPROPERTYEX(''?'', ''Status'') = ''ONLINE'' BEGIN USE [?]; SELECT DB_ID() AS DatabaseId, DB_NAME() AS DatabaseName, SCHEMA_NAME(schema_id) AS SchemaName, name AS ObjectName FROM sys.objects WHERE name = ' + CHAR(39) + @ObjectName + CHAR(39) + ' END' PRINT @SqlExec INSERT INTO @Result EXEC sp_MSforeachdb @SqlExec SELECT * FROM @Result |
Autre exemple, dans le script ci-dessous, pour passer toutes les bases de données en mode de récupération simple, on pourra procéder ainsi :
1 2 3 4 5 |
EXEC sp_MSforeachdb ' IF DB_ID(''?'') BETWEEN 5 AND 32766 AND DATABASEPROPERTYEX(''?'', ''Status'') = ''ONLINE'' AND DatabasePropertyEx(''?'', ''Recovery'') =''FULL'' BEGIN EXEC (''ALTER DATABASE [?] SET RECOVERY SIMPLE;'') END' |
Pour exécuter une requête sur plusieurs tables :
https://www.concatskills.com/2017/04/21/executer-script-toutes-tables-dune-base-de-donnees/
Pour exécuter une requête sur plusieurs instances, voir le Webcast sur SQL Management Studio, 00:05:00 :
https://www.concatskills.com/2014/08/05/trucs-et-astuces-ssms
Dans la liste des serveurs enregistrés, faire un clic droit sur le conteneur qui nous intéresse, New Query :