我正在尝试编写一个存储过程,该存储过程将允许我编写在SQL Server上的所有数据库上运行的单个SELECT语句。 (微软SQL 2005)为统计目的查询多个数据库SQL
到目前为止,香港专业教育学院想出了下面的过程
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'
我可以指望在所有数据库中的所有产品,问题是我返回数据的方式。现在我得到了几个“窗户”,结果巫婆是非常难以控制的。 所以我的问题是,我怎么能得到非常像一个选择结果..,联盟选择..,联盟选择..? (换句话说,一个结果表)?
我想过在程序内部创建临时表,您怎么看?
在此先感谢!
谢谢,我会试试这个。 – Alexander 2010-07-19 12:34:18
有什么更大的nvarchar(最大)? /: 这对我不起作用 – Alexander 2010-07-19 13:03:27
它没有足够的字符。该查询得到'切断' – Alexander 2010-07-19 13:12:29