SQL Server curseur imbriqué problème

J'ai un problème étrange avec mon curseurs imbriqués et je n'ai aucune idée de quoi il s'agit.

Voici mon code T-SQL:

declare @dbname varchar(50)
declare @servername varchar(50)
declare srv cursor for select servername from test.dbo.servers
declare @str varchar(200)

truncate table test.dbo.temp

open srv
fetch next from srv into @servername
while @@fetch_status = 0   
begin   
   set @str = 'Data Source='+@servername+';Integrated Security=SSPI'   
   declare db cursor for select name from opendatasource('SQLNCLI', @str).master.dbo.sysdatabases
   open db
   fetch next from db into @dbname
   while @@fetch_status = 0
   begin
      insert test.dbo.temp (dbname, servername) values (@dbname, @servername)
      fetch next from db into @dbname
   end
   fetch next from srv into @servername
   close db
   deallocate db
end   
close srv
deallocate srv

Il me donne le message d'erreur suivant:

Syntaxe incorrecte près de '@str'.
[SQLSTATE 42000] (Erreur 102)

Dirait que le problème est dans le don de la variable comme paramètre à la fonction opendatasource. Mais pourquoi? Et comment éviter ce problème?

  • curseur imbriqué : c'est votre problème là!!
  • Je pense qu'un curseur imbriqué est le seul moyen viable de faire ce que l'OP veut faire (en boucle par toutes les bases de données en un ensemble de serveurs, dont les noms sont contenus dans un tableau)
InformationsquelleAutor stee1rat | 2010-12-08