[SQL SERVER][TS]延遲名稱解析及編譯

[SQL SERVER][TS]延遲名稱解析及編譯

前天朋友告訴我建立Store Procedure時有Bug,

理由是SQL Server不會確認Store Procedure內容中所參考的物件是否有效,

當時我告訴朋友,如果參考的物件是資料表或檢視表就不會確認,

這是因為SQL Server的延遲名稱解析及編譯所造成的,

在建立SP時,SQL Server只會剖析語法是否正確,

而所參考的資料表或檢視表並不必存在,只要執行時存在即可,

因為這樣我做了一些小小測試,

看看是否真只有資料表或檢視表才能使用延遲名稱解析及編譯

 

資料庫現有物件

image

 

測試一:

SP中參考資料表和檢視表

image

 

image

可以看到查詢視窗出現物件名稱無效警告,但因為延遲名稱解析及編譯的特性,

所以依然可以建立該SP,且不會顯示任何警告或錯誤訊息.

 

測試二:

SP中參考其他SP

image

雖然也是可以建立該SP,但會確認所參考的物件是否存在.同時也會顯示警告訊息.

 

測試三:

SP中參考伺服器物件

image

image

可以看到無法建立該SP,同時也會顯示相關錯誤訊息.

 

結論:

經過一些小小測試,果然只有資料表和檢視表可以使用延遲名稱解析及編譯,

雖然這是一個小問題,但沒聽過延遲名稱解析及編譯的人,

可能就會對我說: SQL Server有Bug,SQL Server 好神奇之類的話...

 

參考

延遲名稱解析及編譯