我想知道是否有一种简单的方法来列出所有引用不存在的表的存储过程,而不是一一遍历并查看代码。
答案 0 :(得分:4)
至少有几种变体:
使用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
付费工具 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