2014-01-30 114 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]'? –