SQL Server 如何获取视图投影列对应的源表名?
数据阿明
结论
可以使用 sys.dm_exec_describe_first_result_set 检查只读取该视图的查询。它会返回结果集列的来源元数据,包括 source_schema_name、source_table_name 和 source_column_name。由于查询读取的是视图的输出结果,返回的列对应视图投影,不包括仅用于 JOIN 条件的列。
查询示例
将 dbo.YourView 替换为视图的实际架构名和名称:
SELECT
column_ordinal,
name AS view_column_name,
source_schema_name,
source_table_name,
source_column_name
FROM sys.dm_exec_describe_first_result_set(
N'SELECT * FROM dbo.YourView',
NULL,
0
)
WHERE is_hidden = 0
ORDER BY column_ordinal;
对于题目中的视图,如果五个输出列都直接引用基础表列,结果会按视图输出顺序列出 ID、FullName、JoiningDate、DepartmentName 和 RegionName,并报告各自的来源表和列。Departments.ID、Employees.DeptID、Regions.ID 和 Employees.RegionID 只用于关联条件,不是视图的输出列,因此不会作为额外结果行出现。
注意事项
如果视图使用计算表达式、常量,或来源无法唯一确定的表达式,来源字段可能为 NULL。例如,Emp.ID + 1 AS AdjustedID 的结果未必能映射到单一源列。遇到这种情况,可以结合视图定义判断表达式的来源。
SELECT * 会检查视图当前公开的所有输出列。若只需检查部分列,可以改用显式列清单,例如 SELECT ID, FullName FROM dbo.YourView。调用者还需要具备读取相关对象元数据的权限。
备注:内容仅供参考。
