mssql sqlserver sql脚本获取异常存储过程的方法分享


摘要:
下文通过sql脚本获取sqlserver数据库中,已经失效的存储过程(
失效的存储过程指:所对应的表、视图、函数、等等所涉及的系统对象已经被删除或不存在而导致的存储过程无法正常使用,我们将此类存储过程称之为“失效存储过程”


实现思路如下所示:
我们根据失效的规则,获取相关的无效存储过程

SELECT
	b.name AS      [存储过程名称],
	a.referenced_entity_name AS [涉及的对象]
    FROM sys.sql_expression_dependencies a
      INNER JOIN sys.procedures b ON  a.referencing_id = b.object_id 
        WHERE a.referenced_id IS NULL                         --涉及的对象不在系统中
	       AND referenced_schema_name IS NOT NULL
	       AND  a.referenced_server_name IS NULL     --剔除涉及的外部链接数据源
	       AND a.referenced_database_name IS NULL  --涉及的为同服务器上的不同数据库    去掉依赖的是同数据服务器上的其他数据库的。
	       AND a.is_caller_dependent !=1                    --依赖的不是存储过程
	       AND a.referenced_entity_name NOT IN (SELECT name FROM  sysobjects) 所涉及的对象非系统对象
               ORDER BY a.name