【SQL Server】递归CTE查询view/sp/fun中使用的所有表

本文介绍了如何利用SQL Server的系统表`sys.sql_expression_dependencies`和`sys.sql_modules`查询对象间的依赖关系。通过递归CTE,可以深入查找视图、存储过程和函数中所有依赖的用户表,尤其适用于解决性能问题和更新统计信息时查找所有相关表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     在SQL编码中,很多编程人员常会使用嵌套view或者存储过程(sproc)完成代码,虽然出于性能和可维护性的考虑并不推荐使用多层嵌套,但现实中仍然是较为常见的编码习惯(方便呗~~)。那么针对多层嵌套的情况需要找出所有用户自定义表(或其它类型对象)往往就显得不是那么的容易了,当然可以通过一层一层统计获得,那么有没有精确并快速的方法找出所有的表呢。

     首先,得从系统表sys.sql_expression_dependencies说起,该系统表主要用于查询SQL Server对象间的依赖关系,例如,在视图定义中引用表时,作为引用实体的视图将依赖于表这个被引用的实体,用户定义实体的每个按名称依赖项在此表中均占一行。

      以下SQL 用于查询所有给定对象依赖的所有对象。如给定的对象为视图,则返回当前视图所有依赖的对象(table,view,fun,etc),因此可以查询出视图中所用的实体对象。

SELECT OBJECT_NAME(referencing_id) AS referencing_entity_name, 
       o.type_desc AS referencing_desciption, 
       COALESCE(COL_NAME(referencing_id, referencing_minor_id), '(n/a)') AS referencing_minor_id, 
       referencing_class_desc,
       referenced_entity_name,
       o2.type_desc AS referenced_desciption, 
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值