Create Procedure時不會檢查Procedure中資料庫物件是否存在,只會檢查語法正確性。
昨天PASS舉辦的聚會中,講師保哥在Demo過程中成功建立一個預存程序。
然而該預存程序中有Select一個不存在的Table,而VS2013也有警告訊息,當
下保哥遲疑為何可以成功建立預存程序。此時百敬老師補充,預存程序在
建立時是可以接受不存在的資料庫物件。而 View 跟 Function則在建立時會
去檢查物件是否存在,如不存在則會報錯並建立失敗。
以下為來自於MSDN關於Create Procedure的文字說明
程序可以參考尚未存在的資料表。 在建立時,只會執行語法檢查。
在第一次執行程序之前,不會編譯該程序。 只有在編譯期間才會解
析程序中參考的所有物件。 因此,仍可順利建立參考不存在的資料
表中語意正確的程序;不過,如果參考的資料表不存在,程序在執行
階段將會失敗。
下圖中我們嘗試建立Store Procedure跟View及Function。它們的內容
都只是單純的Select一張不存在的Table。但可以看見只有Store Procedure
建立成功,View跟Function都建立失敗。.
需要注意的是,即使Store Procedure可以建立成功,但在執行編譯時如該物件
還是不存在,那執行該SP還是會發生錯誤。
我是ROCK
rockchang@mails.fju.edu.tw