Sql-Server-2008

如何檢查儲存過程是否有效

  • March 29, 2011

眾所周知,可以編譯並擁有這樣的儲存過程:

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 中使用一個數據庫項目,自動(每日)部署和驗證所有警告(可能將警告視為錯誤),因為這些問題將是警告,而不是錯誤。

引用自:https://dba.stackexchange.com/questions/1955