You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询SQL 2008 R2视图所引用的数据库字段列名?

如何列出SQL Server 2008 R2视图引用的数据库字段?

当然可以!SQL Server 2008 R2自带的系统视图就能帮你轻松搞定这个需求,不用手动去逐个查看视图定义。下面是一个直接可用的查询语句,运行后就能得到所有视图引用的字段明细:

SELECT 
    v.name AS [视图名称],
    SCHEMA_NAME(o.schema_id) AS [引用对象的架构],
    o.name AS [引用对象名称],
    c.name AS [字段名],
    c.data_type AS [字段数据类型],
    c.column_id AS [字段在表中的位置]
FROM 
    sys.views v
INNER JOIN 
    sys.sql_expression_dependencies sed ON v.object_id = sed.referencing_id
INNER JOIN 
    sys.objects o ON sed.referenced_id = o.object_id
INNER JOIN 
    sys.columns c ON o.object_id = c.object_id
WHERE 
    sed.referenced_class_desc = 'OBJECT' -- 仅筛选对表/视图这类对象的引用
    AND o.type IN ('U', 'V') -- U=用户自定义表,V=视图(包含嵌套视图的引用)
ORDER BY 
    v.name, o.name, c.column_id;

对查询里关键部分的说明:

  • sys.views:存储当前数据库中所有视图的基础信息
  • sys.sql_expression_dependencies:记录数据库对象(比如视图)对其他对象的依赖关系
  • sys.objects:涵盖所有数据库对象(表、视图、存储过程等)的元数据
  • sys.columns:保存表和视图的字段详细信息

如果你的视图存在嵌套引用(比如视图A引用视图B,视图B再引用表C),这个查询会直接展示视图A最终依赖的表C的字段。要是你只想看视图直接引用的对象(包括其他视图),可以调整o.type的条件,比如只保留o.type = 'V'。

另外,如果视图涉及跨数据库引用,需要在查询中加入sed.referenced_database_name的判断,甚至可能需要用动态SQL去查询目标数据库的系统视图,不过这种场景相对少见。

内容的提问来源于stack exchange,提问作者Ben Cameron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:48:54