【发布时间】:2011-03-17 21:23:48
【问题描述】:
我正在尝试编写一个存储过程,它允许我编写一个在我的 SQL Server 上的所有数据库上运行的单个 SELECT 语句。 (微软 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 .. 的结果? (换句话说,一个结果表)?
我想在过程中创建一个临时表,你怎么看?
提前致谢!
【问题讨论】:
标签: sql sql-server-2005