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

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

我想要一个查询

  1. SELECT COUNT(*) FROM CUSTOMERS

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

1 – 数据库名称

2 – COUNT(*)的值

例:

  1. DBName // COUNT (*)
  2.  
  3. TestDB1 // 4
  4.  
  5. MyDB // 5
  6.  
  7. etc...

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

解决方法

尝试这个 –
  1. SET NOCOUNT ON;
  2.  
  3. IF OBJECT_ID (N'tempdb.dbo.#temp') IS NOT NULL
  4. DROP TABLE #temp
  5.  
  6. CREATE TABLE #temp
  7. (
  8. [COUNT] INT,DB VARCHAR(50)
  9. )
  10.  
  11. DECLARE @TableName NVARCHAR(50)
  12. SELECT @TableName = '[dbo].[CUSTOMERS]'
  13.  
  14. DECLARE @sql NVARCHAR(MAX)
  15. SELECT @sql = STUFF((
  16. SELECT CHAR(13) + 'SELECT ''' + name + ''',COUNT(1) FROM [' + name + '].' + @TableName
  17. FROM sys.databases
  18. WHERE OBJECT_ID(name + '.' + @TableName) IS NOT NULL
  19. FOR XML PATH(''),TYPE).value('.','NVARCHAR(MAX)'),1,'')
  20.  
  21. INSERT INTO #temp (DB,[COUNT])
  22. EXEC sys.sp_executesql @sql
  23.  
  24. SELECT *
  25. FROM #temp t

输出(例如,在AdventureWorks中) –

  1. COUNT DB
  2. ----------- --------------------------------------------------
  3. 19972 AdventureWorks2008R2
  4. 19975 AdventureWorks2012
  5. 19472 AdventureWorks2008R2_Live

猜你在找的MsSQL相关文章