在所有数据库上执行SQL查询

时间:2014-10-23 15:31:13

标签: sql sql-server database

我有一个包含17个具有相同表结构的数据库的SQL Server。我想对每个数据库中的每个表进行计数查询

DECLARE @command varchar(1000)

SELECT @command = 'IF ''?'' NOT IN(''master'', ''model'', ''msdb'', ''tempdb'', ''ReportServer'', ''ReportserverTempDB'') 

BEGIN 
    USE ? 
    EXEC(''SELECT COUNT(MODEL) AS rptdevicecount 
           FROM dbo.devices WHERE MODEL IS NOT NULL'') END'

EXEC sp_MSforeachdb @command

现在我有两个问题:

  1. 如何合并计数结果?所以我想知道总共有多少设备,而不是每个数据库。
  2. 运行此查询时,出现错误

      

    Msg 911,Level 16,State 1,Line 2
      数据库'CH'不存在。确保正确输入名称。

  3. 我应该通过添加IF EXISTS来解决这个问题。但是我必须把它放在哪里?

    谢谢!

1 个答案:

答案 0 :(得分:1)

这样的事情:

CREATE TABLE #T1 (DBName varchar(20), Qty int)
EXECUTE master.sys.sp_msforeachdb 'USE [?]; 
IF DB_NAME() NOT IN (''master'',''model'',''msdb'',''tempdb'',''ReportServer'',''ReportServerTempDB'')
BEGIN
    INSERT INTO #T1
    SELECT db_Name(), COUNT(*) FROM sys.tables
END
'
SELECT SUM(qty) FROM #T1
DROP TABLE #T1