2015-11-19 23 views
0

我們在工作中執行研究,每項研究都有自己的數據庫。所有研究數據庫位於同一臺服務器上,並且eaxch有一個名爲MAP_ALERT的表。查找所有空表格在服務器上的所有數據庫中命名爲MAP_ALERT

我需要找到所有研究數據庫中不包含數據的所有MAP_ALERT表。我發現這個頁面告訴我如何在一個數據庫中查找空表:Select all empty tables in SQL Server - 如何調整它以查找給定服務器上所有數據庫中名爲MAP_ALERT的所有空表?

回答

2

你可以在這裏使用動態sql來幫助你。這是查詢每個數據庫的系統表。這甚至會正確處理沒有該表的數據庫。

declare @SQL nvarchar(MAX) 
set @SQL = ''; 

create table #Results 
(
    DBName sysname 
) 

select @SQL = @SQL + 'if exists(select * from ' + name + '.sys.tables where name = ''MAP_ALERT'') insert #results (DBNAME) select ''' + name + ''' from ' + name + '.dbo.MAP_ALERT having count(*) > 0;' 
from sys.databases 

--select @SQL 
--uncomment the following when you have evaluated the dynamic sql and understand what query is going to run on your system 
exec sp_executesql @SQL 

select * from #Results 
+0

這很有幫助,但它似乎只是查詢一個數據庫。我怎樣才能讓它循環遍歷所有這些? – JeffK627

+0

它正在查詢單個實例上的所有數據庫。這就是爲什麼select語句從sys.databases中提取的原因。它不必循環或循環。試試看,你會看到。 –

+0

我沒有嘗試過,它只提取一個數據庫名稱,而且它甚至沒有MAP_ALERT表。不知道是否SQL Server版本很重要,但這是一箇舊的遺留應用程序使用2005年。 – JeffK627

相關問題