我试图找到一种方法来验证所有sql server存储过程。我尝试过使用sp_recompile
和sp_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'.
有没有办法检查存储过程是否有效还是可以毫无问题地执行?
提前致谢
答案 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