SQL Server:从所有数据库中获取所有视图

use*_*931 1 sql t-sql sql-server

实际上,我可以获得包含某个表的所有数据库的列表:

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

但是现在我想对视图做一些类似的事情,以便列出数据库中的所有视图。

你能用这种方法帮助我吗?

问候。

Aar*_*and 5

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;
Run Code Online (Sandbox Code Playgroud)

  • 那么将 `[database]` 更改为 `[db_name]` 并将 `[view]` 更改为 `[db_table]`? (2认同)