Parcourir plusieurs bases de données et exécuter un script SQL

Fermé
Erismzn63 Messages postés 1 Date d'inscription jeudi 28 mars 2013 Statut Membre Dernière intervention 28 mars 2013 - 28 mars 2013 à 21:01
Morgothal Messages postés 1236 Date d'inscription jeudi 22 avril 2010 Statut Membre Dernière intervention 19 mai 2015 - 5 juil. 2014 à 12:35
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é :)


A voir également:

1 réponse

Morgothal Messages postés 1236 Date d'inscription jeudi 22 avril 2010 Statut Membre Dernière intervention 19 mai 2015 183
Modifié par Morgothal le 29/03/2013 à 10:10
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
2
Morgothal Messages postés 1236 Date d'inscription jeudi 22 avril 2010 Statut Membre Dernière intervention 19 mai 2015 183
29 mars 2013 à 10:12
Après, à toi d'exclure les bases systèmes (tu peux gérer ça avec l'ID de la base >4)
0
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.
0
Morgothal Messages postés 1236 Date d'inscription jeudi 22 avril 2010 Statut Membre Dernière intervention 19 mai 2015 183
5 juil. 2014 à 12:35
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+
0