如何在SQL Server中查询表所属数据库名?附实现代码
获取含指定关键字的列、表及对应数据库/架构信息
首先,你之前尝试关联sys.tables和sys.databases没成功,其实是因为在单数据库的查询上下文里,不需要直接关联这两个系统视图——sys.databases是服务器级视图,记录所有数据库的信息,而sys.tables是当前数据库内的表信息,两者没有直接的外键关联字段(除非你要跨库查询所有数据库的表,但你的场景是查询当前库的话,用内置函数更简单)。
针对你的需求,用DB_NAME()函数就能直接获取当前查询所在的数据库名,再加上SCHEMA_NAME()获取表所属的架构,就能得到更完整的层级信息。最终优化后的查询语句如下:
SELECT '[' + SCHEMA_NAME(schema_id) + '].[' + DB_NAME() + ']' AS "Database_Schema_Name", t.name AS 'Table_Name', c.name AS 'Column_Name' FROM sys.columns c JOIN sys.tables t ON c.object_id = t.object_id WHERE c.name LIKE '%Broker%' ORDER BY Table_Name, Column_Name;
代码说明:
DB_NAME():返回当前连接的数据库名称,无需关联系统视图就能直接获取SCHEMA_NAME(t.schema_id):通过表的schema_id获取对应的架构名(比如dbo),让结果的层级关系更清晰- 用方括号
[]包裹名称:避免遇到含特殊字符或关键字的表/架构名时出现语法错误
如果你需要跨所有数据库查询含Broker的列,那才需要遍历sys.databases并动态执行查询,但从你的最终代码来看,当前库的查询场景已经完全满足需求啦。
内容的提问来源于stack exchange,提问作者Chris Lombardi




