Bonjour,
J'ai écrit un script SQL qui passe en revue l'ensemble des bases existantes sur un serveur. Pour chaque base, j'ai besoin d'exécuter une requête sur la table sys.database_files et de récupérer la valeur retournée, mais j'ai des problèmes de syntaxe.
Voici le script que boucle sur l'ensemble des bases :
A l'intérieur de la boucle, j'ai essayé de faire un USE :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 declare c cursor for select name from sysdatabases where name like 'DB%' and name <> 'DB000000' and (databasepropertyex(name,'Status') = 'ONLINE') for read only declare @name varchar(32) declare @cmd varchar(256) declare @size integer open c fetch next from c into @name while @@fetch_status = 0 begin -- -- ici les commandes à exécuter pour chaque base -- fetch next from c into @name end close c deallocate c
Mais la requête ne s'exécute pas sur la base définie par @name mais sur MASTER.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 select @cmd = 'use ' + @name execute (@cmd) select size from sys.sysdatabase_files
Comment faire pour exécuter la requête sur la base définie par @name ?
J'ai essayé
qui renvoie une erreur de syntaxe n°156
Code : Sélectionner tout - Visualiser dans une fenêtre à part select size from @name.sys.sysdatabase_files
J'ai aussi essayé de définir la syntaxe de ma requête dans une variable :
Ce qui fonctionne, mais comment faire pour récupérer le résultat de la requête dans une variable ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 select @cmd = 'select size from ' + @name +'sys.sysdatabase_files' execute (@cmd)
D'avance merci pour votre aide.
Environnement : SQL2005
Partager