将数据库名称与表列表关联

Dar*_*ver 5 sql database sql-server-2008

在服务器上列出所有带有模式的表是没有问题的

SELECT SCHEMA_NAME(schema_id), name FROM sys.tables
Run Code Online (Sandbox Code Playgroud)

如何确定表所在的数据库?

SQL*_*ace 8

sys.tables存在于所有数据库中,因此我没有关注您不知道您所在的数据库的事实.您可以运行DB_NAME(DB_ID())来获取数据库名称

SELECT  DB_NAME(DB_ID()),SCHEMA_NAME(schema_id), name FROM sys.tables
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,DB_NAME(DB_ID())将为每一行返回相同的值

要为所有数据库执行此操作,您可以执行此操作

EXEC sp_msforeachdb 'use  [?] SELECT  ''?'',SCHEMA_NAME(schema_id), name 
                                  FROM sys.tables'
Run Code Online (Sandbox Code Playgroud)

您当然可以将其转储到表格中

CREATE TABLE #output (DatabaseName VARCHAR(1000), 
                   SchemaName VARCHAR(1000), 
                  TableName VARCHAR(1000))

INSERT #output
EXEC sp_msforeachdb 'use  [?] SELECT  ''?'',SCHEMA_NAME(schema_id), name 
                                  FROM sys.tables'

SELECT * FROM #output
Run Code Online (Sandbox Code Playgroud)

就像一个FYI,sp_msforeachdb proc是未记录的,你不应该将它用于生产代码,快速找到一些好的东西,因为生产代码滚动你自己的这个proc的版本

另见Aaron Bertrand的帖子: