You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在SQL Server中查询表所属数据库名?附实现代码

获取含指定关键字的列、表及对应数据库/架构信息

首先,你之前尝试关联sys.tablessys.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

火山引擎 最新活动