Я пытаюсь смоделировать вашу проблему.
Изменение базы данных может вызвать ошибку, но я попытался использовать exec
и изменил A
на master
, как это:
GO
Create procedure proc_UseDatabase as
begin
declare @DB as varchar(max)
DECLARE @dbname VARCHAR(100)
DECLARE db_cursor CURSOR FOR
SELECT name FROM master.[dbo].sysdatabases WHERE version != 0
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @dbname
WHILE @@FETCH_STATUS = 0
BEGIN
--SELECT 'IF (@dbname = ''' + name + ''') USE ' + name FROM master.dbo.sysdatabases WHERE version != 0 AND name NOT IN ('msdb', 'master', 'tempdb', 'model')
IF (@dbname = 'master')
set @DB = 'USE master'
exec(@DB)
IF (@dbname = 'B')
set @DB = 'USE B'
exec(@DB)
IF (@dbname = 'C')
set @DB = 'USE C'
exec(@DB)
IF (@dbname = 'D')
set @DB = 'USE D'
exec(@DB)
IF (@dbname = 'E')
set @DB = 'USE E'
exec(@DB)
IF (@dbname = 'F')
set @DB = 'USE F'
exec(@DB)
IF (@dbname = 'G')
set @DB = 'USE G'
exec(@DB)
IF (@dbname = 'H')
set @DB = 'USE H'
exec(@DB)
IF (@dbname = 'I')
set @DB = 'USE I'
exec(@DB)
set @DB = @DB
FETCH NEXT FROM db_cursor INTO @dbname
END
select @DB -- Just get the return value of 'exec' to view a result
CLOSE db_cursor
DEALLOCATE db_cursor
end
GO
Возврата ошибки нет:
Вы также можете смоделировать это.
Надеюсь, это поможет