sql-server – 如何在实例上的所有数据库上运行相同的查询?

前端之家收集整理的这篇文章主要介绍了sql-server – 如何在实例上的所有数据库上运行相同的查询?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有(用于测试目的)许多具有相同模式的dbs(=基本上相同的表和列)在sql server 2008 r2实例上.

我想要一个查询

SELECT COUNT(*) FROM CUSTOMERS

在实例上的所有DB上.我想要结果2列:

1 – 数据库名称

2 – COUNT(*)的值

例:

DBName  //   COUNT (*)

TestDB1 // 4

MyDB  // 5

etc...

注意:我认为CUSTOMERS表存在于所有的dbs(master除外).

解决方法

尝试这个 –
SET NOCOUNT ON;

IF OBJECT_ID (N'tempdb.dbo.#temp') IS NOT NULL
   DROP TABLE #temp

CREATE TABLE #temp
(
      [COUNT] INT,DB VARCHAR(50)
)

DECLARE @TableName NVARCHAR(50) 
SELECT @TableName = '[dbo].[CUSTOMERS]'

DECLARE @sql NVARCHAR(MAX)
SELECT @sql = STUFF((
    SELECT CHAR(13) + 'SELECT ''' + name + ''',COUNT(1) FROM [' + name + '].' + @TableName
    FROM sys.databases 
    WHERE OBJECT_ID(name + '.' + @TableName) IS NOT NULL
    FOR XML PATH(''),TYPE).value('.','NVARCHAR(MAX)'),1,'')

INSERT INTO #temp (DB,[COUNT])              
EXEC sys.sp_executesql @sql

SELECT * 
FROM #temp t

输出(例如,在AdventureWorks中) –

COUNT       DB
----------- --------------------------------------------------
19972       AdventureWorks2008R2
19975       AdventureWorks2012
19472       AdventureWorks2008R2_Live

猜你在找的MsSQL相关文章