Create Procedure時不會檢查Procedure中資料庫物件是否存在,只會檢查語法正確性。

Create Procedure時不會檢查Procedure中資料庫物件是否存在,只會檢查語法正確性。

昨天PASS舉辦的聚會中,講師保哥在Demo過程中成功建立一個預存程序。

然而該預存程序中有Select一個不存在的Table,而VS2013也有警告訊息,當

下保哥遲疑為何可以成功建立預存程序。此時百敬老師補充,預存程序在

建立時是可以接受不存在的資料庫物件。而 View 跟 Function則在建立時會

去檢查物件是否存在,如不存在則會報錯並建立失敗。

 

以下為來自於MSDN關於Create Procedure的文字說明

 

程序可以參考尚未存在的資料表。 在建立時,只會執行語法檢查。

在第一次執行程序之前,不會編譯該程序。 只有在編譯期間才會解

析程序中參考的所有物件。 因此,仍可順利建立參考不存在的資料

表中語意正確的程序;不過,如果參考的資料表不存在,程序在執行

階段將會失敗。

 

下圖中我們嘗試建立Store Procedure跟View及Function。它們的內容

都只是單純的Select一張不存在的Table。但可以看見只有Store Procedure

建立成功,View跟Function都建立失敗。.

物件-5

 

需要注意的是,即使Store Procedure可以建立成功,但在執行編譯時如該物件

還是不存在,那執行該SP還是會發生錯誤。

我是ROCK

rockchang@mails.fju.edu.tw