2014-01-30 115 views
-3

其實我能得到一個包含某個表的所有數據庫的列表,獲取所有訪問量:SQL服務器:從所有數據庫

SELECT name 
FROM sys.databases 
WHERE CASE 
     WHEN state_desc = 'ONLINE' 
       THEN OBJECT_ID(QUOTENAME(name) + '.[dbo].[TABLE_NAME]', 'U') 
     END IS NOT NULL 

但現在我想要做的觀點類似,爲了列出數據庫中的所有視圖。

你能幫我解決這個問題嗎?

問候。

+1

要列出所有視圖請嘗試使用[sys.viws](http://blog.sqlauthority.com/2010/10/29/sql-server-list-of-all-the-views-from-數據庫/)。 – user2989408

+0

這種排序做我想要的,但只爲當前數據庫即時查詢,我想每個數據庫的所有視圖的列表。 – user3149931

回答

1
CREATE TABLE #v(d SYSNAME, v NVARCHAR(512)); 

DECLARE @sql NVARCHAR(MAX); 
SET @sql = N''; 

SELECT @sql = @sql + N'INSERT #v(d,v) 
    SELECT ''' + REPLACE(name, '''','''''') + ''', 
    QUOTENAME(s.name) + ''.'' + QUOTENAME(v.name) 
    FROM ' + QUOTENAME(name) + '.sys.views AS v 
    INNER JOIN ' + QUOTENAME(name) + '.sys.schemas AS s 
    ON v.[schema_id] = s.[schema_id] 
    WHERE v.is_ms_shipped = 0; 
' 
FROM sys.databases 
WHERE [state] = 0; 

EXEC sp_executesql @sql; 

SELECT [database] = d, [view] = v FROM #v ORDER BY d,v; 

DROP TABLE #v; 
+0

這工作很好,但實際上我也想要的,是數據庫的列表類似:db_name | db_table |查看結果集 – user3149931

+1

因此,將'[database]'更改爲'[db_name]',將[view]更改爲'[db_table]'? –