Sql 查询每个数据库

Sql 查询每个数据库,sql,sql-server-2008,tsql,Sql,Sql Server 2008,Tsql,我希望使用以下内容搜索数据库搜索中的每个数据库(它们都具有相同的表名): 从NAME='blah'的表中选择不同的名称 我试过这个: 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) SE

我希望使用以下内容搜索数据库搜索中的每个数据库(它们都具有相同的表名):

从NAME='blah'的表中选择不同的名称

我试过这个:

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].[TABLE]'

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, 1, '')

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

SELECT * 
FROM #temp t
最简单的方法是使用(未记录的)。它的用途是:

exec sp_msforeachdb @command1 = N'insert into #tmp select "?", * from [?].dbo.table';
需要注意的是
,它是数据库名称的占位符。在
@command1
字符串中,使用双引号代替单引号

此过程还将枚举系统数据库,通过附加
if db_id(“?”>4
跳过它们,您可以很容易地避开这一点