我試圖找到驗證所有sql server存儲過程的方法。我曾嘗試使用sp_recompile
和,但它不起作用。檢查Sql Server中存儲過程的有效性
例如,這個存儲過程編譯沒有問題,雖然表中沒有存在
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'.
有沒有辦法來檢查存儲過程是否有效或可以毫無問題地執行?提前
除非您嘗試訪問它,否則驗證某件事似乎很難; ala通過執行存儲過程。爲什麼不執行來確定它是否有效? –
這是因爲sql server有一個稱爲延遲名稱解析的功能。這意味着一個過程可以編譯,即使它引用了還不存在的對象。直到它需要生成一個執行計劃,這將是一個問題。 https://technet.microsoft.com/en-US/library/ms190686.aspx –
我的主要問題是,我有一個很大的數據庫存儲過程。很多原因都是無效的(重命名列,刪除表等)。我試圖找到一種方法來驗證所有數據庫並檢查所有程序。 @AaronMcIver,我試過了,但有存儲過程接收參數。 – NioZero