首页 > 技术文章 > sql之-存储过程的血缘分析

cdm023 2019-11-19 09:22 原文

 这个是在工作中针对存储过程做血缘分析的时候使用到的,用的时候还是挺好用的,记录一下

希望后面遇到类似的即可立即投入使用!

 

1.检查存储过程使用哪些表:

 1   select base.name AS 存储过程
 2           ,‘’    AS 目标表
 3           ,''   AS  目标库
 4           ,depend.referenced_entity_name as 依赖的存储过程
 5           ,depend.referenced_database_name as 依赖的数据库
 6    from sys.sql_expression_dependencies_depend 
 7    inner join sys.objects_base
 8       on depend.referencing_id = base.object_id
 9   where base.name ='' --存储过程
10    and  depend.referenced_entity_name <>''--需要排除掉的表,例如一些日志表不需要的

 

2.检查表在哪些存储过程中使用:

 1 select
 2           DB_NAME() as db_name
 3          ,schema_name(o.schema_id) as schema_name
 4          ,o.name as object_name
 5          ,otype_desc
 6          ,d.referenced_server_name
 7          ,d.referenced_database_name
 8          ,isnull(d.referenced_schema_name,'dbo') as referenced_schema_name
 9          ,d.referenced_entity_name
10    from sys.sql_expression_dependencies d
11    inner join sys.objects o
12       on d.referencing_id = o.objet_id
13    where referenced_entity_name=''--表名
14       and referenced_database_name=''--库名

总结,此过程在仓库操作中,对多余的表清理中可以使用此来进行排查,当然,排查的方式也是多种多样,所以,这里也只是自己曾经用过的一个小方法.

后续有此类继续增加,共勉

推荐阅读