Parcourir plusieurs bases de données et exécuter un script SQL
Erismzn63
Messages postés
1
Statut
Membre
-
Morgothal Messages postés 1350 Statut Membre -
Morgothal Messages postés 1350 Statut Membre -
Bonjour,
Je cherche à développer un petit script qui permette de sectionner une liste de champs dans une table et ce pour chacune des bases de données d'un serveur.
J'ai du mal à savoir comment m'y prendre! Auriez vous des idées, exemples? Je suis preneur de toute remarques!
Merci a la communauté :)
Je cherche à développer un petit script qui permette de sectionner une liste de champs dans une table et ce pour chacune des bases de données d'un serveur.
J'ai du mal à savoir comment m'y prendre! Auriez vous des idées, exemples? Je suis preneur de toute remarques!
Merci a la communauté :)
1 réponse
-
Bonjour,
En créant un curseur qui passe sur toutes les bases d'un serveur :
DECLARE @base varchar(20) DECLARE curseur CURSOR FOR SELECT name from master.sys.databases OPEN curseur FETCH curseur into @base WHILE @@FETCH_STATUS = 0 BEGIN print (@base) --select tes_champs from @base.ton_schéma.ta_table FETCH curseur INTO @base END CLOSE curseur DEALLOCATE curseur
A+ !
-------------------
Cordialement,
Clément-
-
Bonjour et merci pour ce script claire et concis.
Je rencontre néanmoins un soucis de syntaxe (Msg 102, Niveau 15, État 1, Ligne 8
Incorrect syntax near '.'.) lors de son implémentation dans mon environnement (SQL serveur 2005).
DECLARE @base varchar(20)
DECLARE curseur CURSOR FOR SELECT name from master.sys.databases where database_id >4 and name like '%ipm%'
OPEN curseur
FETCH curseur into @base
WHILE @@FETCH_STATUS = 0
BEGIN
print (@base)
select us_libelle from @base . dbo.UTILISAT where us_libelle like '%be%'
--select us_libelle from IPM_V9E12.dbo.UTILISAT where us_libelle like '%be%'
FETCH curseur INTO @base
END
CLOSE curseur
DEALLOCATE curseur
Pour info, la ligne en commentaire, qui utilise "en dur" le nom d'une des bases fonctionne très bien. -
Salut,
Dans ton cas, je ferais comme ça :DECLARE @base varchar(20), @SQL nvarchar(1000) DECLARE curseur CURSOR FOR SELECT name from master.sys.databases where database_id >4 and name like '%ipm%' OPEN curseur FETCH curseur into @base WHILE @@FETCH_STATUS = 0 BEGIN print (@base) SET @SQL = 'select us_libelle from ['+@base+'] . dbo.UTILISAT where us_libelle like ''%be%''' EXEC (@SQL) --select us_libelle from IPM_V9E12.dbo.UTILISAT where us_libelle like '%be%' FETCH curseur INTO @base END CLOSE curseur DEALLOCATE curseur
(Il y a peut-être des erreurs de quotes)
A+
-