检查Sql Server中存储过程的有效性

时间:2015-08-21 19:18:32

标签: sql-server stored-procedures

我试图找到一种方法来验证所有sql server存储过程。我尝试过使用sp_recompilesp_refreshsqlmodule,但它不起作用。

例如,虽然表不存在

,但此存储过程编译没有问题
ALTER PROCEDURE sp_Foo
WITH RECOMPILE
AS
BEGIN
    SELECT Foo, Bar
    FROM Table_That_Dont_Exist
END

当我尝试执行它时会抛出错误。

Msg 208, Level 16, State 1, Procedure sp_Foo, Line 5
Invalid object name 'Table_That_Dont_Exist'.

有没有办法检查存储过程是否有效还是可以毫无问题地执行?

提前致谢

2 个答案:

答案 0 :(得分:0)

您可以使用任务 - >编写所有存储过程的脚本。生成脚本功能。将所有脚本保存到单个文本文件中,然后创建解析器以编程方式解析文本并确定要检查的对象。即使接近100%正确,这也非常困难。我正在研究实际运行的函数和过程,但问题是如果传入的值会导致代码块被跳过,那么它就不会验证它们。

这可以验证您的所有观点

SELECT
    'SELECT TOP 1 * FROM ' + obj.name + ' GO;' [SQL]
FROM sys.objects obj
WHERE obj.[TYPE] IN ('V')

这是一个开始。

答案 1 :(得分:0)

这是找到缺少对象引用的过程,视图等的一个不错的起点。

select *
from sys.sql_expression_dependencies
where referenced_id is null
    AND referenced_server_name is null --excludes link server missing items