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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |