Если вам нужно использовать вложенные курсоры, вы делаете что-то не так.Существует очень мало причин использовать курсор вместо какой-либо другой операции, основанной на множестве, и использование курсора внутри курсора похоже на конечный анти-шаблон SQL Server.
Для внутреннего курсора вы можете изменить егоиспользовать недокументированную sp_msforeachdb
функцию (которая, по-видимому, создает курсор за кулисами) :
open srv
fetch next from srv into @servername
while @@fetch_status = 0
begin
EXEC sp_msforeachdb '
Data Source='+@servername+';Integrated Security=SSPI
insert test.dbo.temp (dbname, servername) values (?, @Servername)'
fetch next from srv into @servername
end
close srv
deallocate srv
Возможно, вам потребуется заключить?в одинарных кавычках и экранировать их, например:
EXEC sp_msforeachdb 'insert test.dbo.temp (dbname, servername) values (''?'', @Servername)