Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
查询多个数据库以进行统计SQL_Sql_Sql Server 2005 - Fatal编程技术网

查询多个数据库以进行统计SQL

查询多个数据库以进行统计SQL,sql,sql-server-2005,Sql,Sql Server 2005,我正在尝试编写一个存储过程,该过程允许我编写一条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 databas

我正在尝试编写一个存储过程,该过程允许我编写一条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@tablevariable来获取所有数据

检查此项:

可能是动态SQL

DECLARE @DynSQL nvarchar(max)

select 
@DynSQL = isnull(@DynSQL + ' UNION ALL ','') + 
'SELECT count(*) AS ProdCnt  FROM ' + quotename(name) + '..Products'
 from sys.databases
 WHERE state= 0 AND is_in_standby=0 AND database_id>4 /*Exclude Offline and System 
                                                        databases*/

PRINT @DynSQL /*For Debugging or use the next line if the print output is truncated*/
SELECT @DynSQL AS [processing-instruction(x)] FOR XML PATH('')

EXEC sp_executesql @DynSQL

谢谢pranay,你有关于如何做到这一点的代码示例或参考资料吗?我不太擅长SQL):有比nvarchar(max)更大的吗?/:这对我不起作用,因为我没有足够的字符。问题被“切断”,我怀疑这将是问题所在。我想它需要高达2GB的字符串。你犯了什么错误?事后思考:事实上,我只是认为打印输出可能会在打印时被截断。我添加了一行新内容,将显示所有文本。哦,我真的很抱歉!谢谢,你完全正确。一定是SQL Server Management Studio Express中的“我的结果”窗口截断了它。