2014-10-02 57 views
0

我想每個數據庫在我的數據庫搜索搜索(它們都具有相同的表名)有以下幾點:查詢每一個數據庫

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

發佈您的錯誤 – 2014-10-02 08:46:52

回答

0

最簡單的方法是使用(無證)sp_msforeachdb。它的用法是:

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

值得注意的是?,它是數據庫名稱的佔位符。在@command1字符串中,使用雙引號代替單引號。

此程序還將枚舉系統數據庫,並且您可以通過追加if db_id("?") > 4來跳過它們,從而輕鬆避開該過程。