如何查询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
相关产品推荐
相关产品推荐

