加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 16:16:05 所属栏目:MsSql教程 来源:网络整理
导读:我有(用于测试目的)许多具有相同模式的dbs(=基本上相同的表和列)在sql server 2008 r2实例上. 我想要一个查询 SELECT COUNT(*) FROM CUSTOMERS 在实例上的所有DB上.我想要结果2列: 1 – 数据库名称 2 – COUNT(*)的值 例: DBName // COUNT (*)TestDB1 // 4M
我有(用于测试目的)许多具有相同模式的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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读