Sql-Server
查詢每個數據庫中的對象列表
我有一個分佈在多個數據庫中的大約 300 個視圖的列表。
視圖的 DDL 中使用的一些表已被刪除或重命名。
我想要做的是嘗試查詢每個數據庫中的所有 300 個視圖。
如果查詢成功,我想輸出“查詢成功”。如果由於視圖 DDL 所基於的對象失敗而導致查詢失敗,我想輸出“查詢失敗”。
最終輸出看起來像這樣
database_name schema_name view_name status db_1 dbo view_1 Query Successful db_2 abc view_2 Query Failed
我知道部分解決方案將使用
sp_MSforeachdb
儲存過程,但我不確定在那之後該怎麼做。我有一個儲存在表中的所有要查詢的對象的列表
您可以使用以下程式碼列出針對所有數據庫的所有視圖。它將填充#Result 中的所有內容。之後,您可以使用您的列表進行連接並檢查您想要的任何狀態。
IF OBJECT_ID('tempdb..#Result') IS NOT NULL DROP TABLE #Result; CREATE TABLE #Result ([Database] VARCHAR(100), [schema_name] VARCHAR(100), [view_name] VARCHAR(100)) DECLARE @DB SYSNAME,@cmd NVARCHAR(4000) SET NOCOUNT ON SET @cmd = '' SELECT TOP 1 @DB = D.name FROM master..sysdatabases AS D WHERE dbid > 4 and DATABASEPROPERTYEX(D.name, 'status') = 'ONLINE' ORDER BY D.name; WHILE @@ROWCOUNT = 1 BEGIN SET @cmd = 'USE ' + @DB + '; INSERT INTO #Result SELECT DISTINCT ''' + @DB + ''' AS CustomerNumber ,sh.name, o.name AS ObjectName FROM sys.objects o INNER JOIN sys.schemas sh on o.schema_id=sh.schema_id WHERE o.type = ''V'' '; EXEC (@cmd) SELECT TOP 1 @DB = NAME FROM master..sysdatabases AS D WHERE dbid > 4 AND DATABASEPROPERTYEX(D.name, 'status') = 'ONLINE' AND D.NAME > @DB ORDER BY D.name END SELECT * FROM #Result R
使用 Microsoft Excel,執行以下操作:
用單詞創建 1 列
Select Count(*) from
。在最右邊的一列(使其成為最後一列)中,使用該CONCATENATE
函式連接第 1 列和每行的視圖名稱最終結果將如下所示
A B C SELECT COUNT(*) FROM view_1 =concatenate(A1, B1, ';') GO SELECT COUNT(*) FROM view_2 =concatenate(A3, B3, ';') GO
然後將所有內容複製並粘貼
column C
到 SSMS 中。問題解決了,我很了不起,我知道。
編輯#1:
使用 count(*) 很昂貴,將其切換為
select top 1
.