查询每个数据库

时间:2014-10-02 08:40:29

标签: sql sql-server-2008 tsql

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

SELECT DISTINCT NAME FROM TABLE WHERE 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

1 个答案:

答案 0 :(得分:0)

最简单的方法是使用(未记录的)sp_msforeachdb。它的用法是:

exec sp_msforeachdb @command1 = N'insert into #tmp select "?", * from [?].dbo.table';

值得注意的是?,它是数据库名称的占位符。在@command1字符串中,使用双引号代替单引号。

此过程还将枚举系统数据库,您可以通过附加if db_id("?") > 4来跳过它们,从而轻松回避这些数据库。