查找引用不存在表的过程

时间:2019-09-10 15:23:00

标签: sql sql-server sql-server-2016

我想知道是否有一种简单的方法来列出所有引用不存在的表的存储过程,而不是一一遍历并查看代码。

3 个答案:

答案 0 :(得分:4)

至少有几种变体:

  1. 使用T-SQL:

    SELECT
       OBJECT_NAME(referencing_id) AS [Procedure/View],
       referenced_entity_name AS [Missing object]       
    FROM 
       sys.sql_expression_dependencies
    WHERE 
       is_ambiguous = 0
       AND OBJECT_ID(referenced_entity_name) IS NULL
    
  2. 付费工具 Redgate SQL Prompt (使用Finding invalid objects)。试用期为一个月

答案 1 :(得分:1)

我建议使用现成的解决方案。例如,Find Invalid Objects in SQL Complete不仅在存储过程的定义内,而且在所有数据库对象(触发器,视图,函数等)内,都可以完美地搜索对不存在对象的所有调用。

答案 2 :(得分:0)

另一个答案涵盖了实体。要查询proc及其活动,请使用以下代码。它显示自上次服务器重新启动以来的活动。您可以使用它来查找多年未执行的proc。

SELECT * 
FROM sys.dm_exec_procedure_stats