Я пытаюсь написать хранимую процедуру, которая позволит мне написать один оператор SELECT, который выполняется во всех базах данных на моем SQL Server. (Microsoft SQL 2005)
до сих пор я придумал следующую процедуру
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [sp_cross_db_query]
@SQLQuery varchar(400)
AS
DECLARE @DB_Name varchar(100)
DECLARE database_cursor CURSOR FOR
SELECT DatabaseName
FROM Management.dbo.Customers
OPEN database_cursor
FETCH NEXT FROM database_cursor INTO @DB_Name
WHILE @@FETCH_STATUS = 0
BEGIN
exec(
'USE [' + @DB_Name + '];' +
@SQLQuery
)
FETCH NEXT FROM database_cursor INTO @DB_Name
END
CLOSE database_cursor
DEALLOCATE database_cursor
для запуска запроса
exec sp_cross_db_query 'SELECT count(*) FROM Products'
по этому я могу сосчитать все продукты по всем базам данных, проблема в том, как мне вернуть мои данные. теперь я получаю несколько «окон», в которых хранится результат, который совершенно неуправляем.
поэтому мой вопрос, как я могу получить результат очень похож на SELECT .., UNION SELECT .., UNION SELECT ..? (другими словами, одна таблица результатов)?
У меня были мысли о создании временной таблицы внутри процедуры, как вы думаете?
Заранее спасибо!