【问题标题】:Using T-SQL to identify columns used in joins in view definitions使用 T-SQL 识别视图定义中连接中使用的列
【发布时间】:2020-01-09 14:10:44
【问题描述】:

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

CREATE VIEW v_name 
AS
SELECT * FROM a
JOIN b ON a.col1 = b.col2

是否可以使用查询、函数或存储过程来获取连接的列?

我了解有一些选项允许使用 sys.sql_expression_dependencies、sys.views 或 sys.dm_referenced_entitities() 获取表,但它们不允许您获取比使用的表更多的元数据.

【问题讨论】:

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

标签: sql tsql join metadata


【解决方案1】:

不是完整的答案,但有助于开始。

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%'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    • 1970-01-01
    • 1970-01-01
    • 2021-01-03
    相关资源
    最近更新 更多