вызов хранимой процедуры в курсоре - PullRequest
0 голосов
/ 13 июля 2011

Я создал хранимую процедуру SQL Server 2005, которая находит зависимые объекты в определенной таблице.

Я хочу запустить эту хранимую процедуру для другой базы данных и для разных таблиц.Я создал курсор для этого.

Когда я пишу USE @dbname, он пытается найти хранимую процедуру в @dbname, а не в текущей базе данных.

Может кто-нибудь, пожалуйста, помогите мне с тем, какнаписать эту команду в курсоре?

DECLARE name_cur CURSOR FOR 
    SELECT db_name, obj_name from Stats_Usage 
    WHERE last_user_update > '2011-06-01' ORDER BY db_name 
DECLARE @tableName NVARCHAR (800)
DECLARE @dbName NVARCHAR(800)
DECLARE @sql NVARCHAR(900)
OPEN name_cur
FETCH name_cur INTO @dbName, @tableName 
WHILE @@Fetch_Status = 0
BEGIN 

SET @sql = 'USE '+@dbName +' EXEC proc_depend ' + @tableName
EXEC (@sql)
FETCH name_cur INTO @dbName, @tableName
END
CLOSE name_cur
DEALLOCATE name_cur
GO

Ответы [ 2 ]

2 голосов
/ 13 июля 2011

Вы можете полностью квалифицировать ваше имя хранимой процедуры.

Предполагая, что база данных, в которой находится ваш SP, называется procs (например), вы можете изменить свой запрос, чтобы использовать следующее:

SET @sql = 'USE '+@dbName +' EXEC procs.dbo.proc_depend ' + @tableName
EXEC (@sql)
1 голос
/ 13 июля 2011

Рефакторинг хранимого процесса для проверки зависимых объектов в базе данных. Вы захотите отправить ему такую ​​команду:

  exec proc_depend 'MyDatabase.dbo.MyTable';

Попробуйте вместо этого:

 SET @sql = ' EXEC proc_depend ''' @dbName + '.dbo.'+ @tableName + ''';

Вам нужно будет изучить и изменить proc_depend, чтобы убедиться, что он может принимать полное имя объекта, например database.schema.table

...