Как выполнить хранимые процедуры с динамически сгенерированного сервера запросов + SQL - PullRequest
1 голос
/ 10 ноября 2009

У меня есть запрос, который динамически выбирает сохраненные имена процессов из всех баз данных. Теперь я хочу выполнить сохраненные процедуры и сохранить результат во временной или табличной переменной.

Как это сделать. Вот мой ИП до сих пор

Declare @GetDBNames sysname
Declare @DynSql nvarchar(max)

Declare DBNames cursor for 
Select '['+name+']' from master.dbo.sysdatabases 

open DBNames
FETCH NEXT FROM DBNames into @GetDBNames

WHILE @@FETCH_STATUS=0
BEGIN

SET @DynSql = '
Select Specific_Catalog as Database_Name, Routine_Name as ''Stored Procedure Name''
From '+ @GetDBNames+'.Information_Schema.Routines '

EXEC (@DynSql)
FETCH NEXT FROM DBNames into @GetDBNames
END

Close DBNames
Deallocate DBNames 

Пожалуйста, помогите. Заранее спасибо

Ответы [ 2 ]

1 голос
/ 10 ноября 2009

Вот мой солютон. Курсоры злые:)

Declare @DynSql nvarchar(max)
declare @result table ([Database_Name] nvarchar(128), [Stored Procedure Name] sysname)

SET @DynSql = ''
select @DynSql = @DynSql + '
Select SPECIFIC_CATALOG COLLATE DATABASE_DEFAULT as Database_Name, ROUTINE_NAME COLLATE DATABASE_DEFAULT as [Stored Procedure Name]
From ' + NAME + '.INFORMATION_SCHEMA.ROUTINES' + CHAR(13) + 'union all' + CHAR(13) 
from master.dbo.sysdatabases

--remove last "union all"
SET @DynSql = left(@DynSql, LEN(@DynSql) - 10) 

insert @result
exec sp_executesql @DynSql 

select * from @result
1 голос
/ 10 ноября 2009
INSERT [TableName] EXEC (@DynSql)

Обратите внимание, что если вы вводите данные, вы можете использовать sp_ExecuteSQL и, возможно, захотите использовать [ / ] экранирование имени объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...