列出所有包含表和值的数据库

Dav*_*ras 3 sql-server

在我们的一个 SQL Server 中,我们连接了多个数据库,其中大多数包含一个小表,比如说 dbo.DBType,该表将始终包含 1 条记录和两列,第一列告诉我数据库是类型 A 还是 B (只允许 A 和 B)。

有没有办法可以查询 SQL Server 的主数据库并检索 A 类型或 B 类型的所有数据库的列表?

我知道我可以在一个循环内连接到它们中的每一个并检查包含的 DBType 表,但我在想

Aar*_*and 10

我在猜测第一列 - 用ColumnName实际的列名替换下面。此外,指定您正在使用的 SQL Server 版本总是很有用的 - 我假设是 2005 年。

DECLARE @DBType CHAR(1);
SET @DBType = 'A'; -- or 'B';

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

CREATE TABLE #x(DB SYSNAME);

SELECT @sql = @sql + 'IF EXISTS (SELECT 1 FROM '
  + QUOTENAME(name) + '.sys.tables WHERE name = ''DBType'')
  INSERT #x SELECT ''' + name + '''
    FROM ' + QUOTENAME(name) + '.dbo.DBType
    WHERE ColumnName = ''' + @DBType + ''';'
FROM sys.databases;

EXEC sp_executesql @sql;

SELECT DB FROM #x;

DROP TABLE #x;
Run Code Online (Sandbox Code Playgroud)