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 :
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
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
select @cmd = 'use ' + @name
  execute (@cmd)
  select size from sys.sysdatabase_files
Mais la requête ne s'exécute pas sur la base définie par @name mais sur MASTER.

Comment faire pour exécuter la requête sur la base définie par @name ?

J'ai essayé
Code : Sélectionner tout - Visualiser dans une fenêtre à part
select size from @name.sys.sysdatabase_files
qui renvoie une erreur de syntaxe n°156

J'ai aussi essayé de définir la syntaxe de ma 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)
Ce qui fonctionne, mais comment faire pour récupérer le résultat de la requête dans une variable ?

D'avance merci pour votre aide.

Environnement : SQL2005