获取列所属的表名,仅在视图的SELECT语句中使用
假设以下是视图的SELECT语句
SELECT Emp.ID, Emp.FullName, Emp.JoiningDate, Dept.DepartmentName, Reg.RegionName
FROM Employees AS Emp
INNER JOIN Departments AS Dept
ON Dept.ID = Emp.DeptID
INNER JOIN Regions AS Reg
ON Reg.ID = Emp.RegionID
我能够通过 sys.views 与 sys.columns 在 object_id 列上的连接,得到视图的列名(ID、FullName、JoiningDate、DepartmentName、RegionName)。但我只想获取在SELECT语句中使用的每个列所归属的表名(ID、FullName、JoiningDate、DepartmentName、RegionName)
我已进行搜索,大多数解法建议使用 INFORMATION_SCHEMA.VIEW_COLUMN_USAGE,但它也会返回在JOIN条件中使用的其他列。也就是说
ID列,来自Departments表DeptID列,来自Employee表ID列,来自Regions表RegionID列,来自Employee表
我想只获取在SELECT语句中用于投影的列,以及这些列所属表的名称。
解决方案
你可以使用 sys.dm_exec_describe_first_result_set 函数来实现这一点,将 @include_browse_information 参数设置为 1。
select
ed.name,
CONCAT_WS(N'.',
ed.source_server,
ed.source_database,
ed.source_schema,
ed.source_table,
ed.source_column) AS source_column
from sys.dm_exec_describe_first_result_set(
N'SELECT * FROM dbo.YourView', NULL, 1) ed
where ed.is_hidden = 0;
通常应避免使用 INFORMATION_SCHEMA,因为它主要用于向后兼容,且存在一些不准确之处。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。