Sql-Server-2008
如何檢查儲存過程是否有效
眾所周知,可以編譯並擁有這樣的儲存過程:
CREATE PROC dbo.MyProc1 AS SELECT * FROM Not_Exists_Or_Removed_Table
要麼
CREATE PROC dbo.MyProc2 AS SELECT Id ,Removed_Column FROM MyValidTable
表Not_Exists_Or_Removed_Table不存在或已被刪除 (MyProc1),列Removed_Column已被刪除 (MyProc2)。
如何檢測和防止創建這樣的儲存過程?
根據 MSDN 文章 - Deferred Name Resolution and Compilation只有第一種情況有效,第二種情況不適用:“只能在引用不存在的表對象時使用延遲名稱解析。所有其他對像在創建儲存過程時必須存在. 例如,當您在儲存過程中引用現有表時,您不能列出該表不存在的列。
為了檢查這種情況,我會在 Visual Studio 中使用一個數據庫項目,自動(每日)部署和驗證所有警告(可能將警告視為錯誤),因為這些問題將是警告,而不是錯誤。