使用T-SQL在视图定义中标识联接中使用的列

使用T-SQL在视图定义中标识联接中使用的列,sql,tsql,join,metadata,Sql,Tsql,Join,Metadata,假设您已根据以下内容定义了视图: CREATE VIEW v_name AS SELECT * FROM a JOIN b ON a.col1 = b.col2 是否可以使用查询、函数或存储过程来获取连接的列 我知道有些选项允许使用sys.sql\u expression\u dependencies、sys.views或sys.dm\u referenced\u entities()获取表,但它们不允许您获取比所用表更多的元数据。这不是完整的答案,但从一开始就很有帮助 SELECT TAB

假设您已根据以下内容定义了视图:

CREATE VIEW v_name 
AS
SELECT * FROM a
JOIN b ON a.col1 = b.col2
是否可以使用查询、函数或存储过程来获取连接的列


我知道有些选项允许使用sys.sql\u expression\u dependencies、sys.views或sys.dm\u referenced\u entities()获取表,但它们不允许您获取比所用表更多的元数据。

这不是完整的答案,但从一开始就很有帮助

SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, SUBSTRING(VIEW_DEFINITION, CHARINDEX('join', VIEW_DEFINITION, 1), LEN(VIEW_DEFINITION)) AS 'View_Join'
FROM INFORMATION_SCHEMA.VIEWS 
WHERE VIEW_DEFINITION like '%JOIN%ON%'

从T-SQL中,您将看到从缓存中获取XML执行计划,然后寻找
join
节点——这是可行的,但绝非易事。您可以从客户机代码中获得更方便的选项,因为.NET中有一个功能齐全的T-SQL解析器(例如,请参见),您可以在数据库项目中搜索对任意列的引用。