[SQL SERVER][TS]延遲名稱解析及編譯
前天朋友告訴我建立Store Procedure時有Bug,
理由是SQL Server不會確認Store Procedure內容中所參考的物件是否有效,
當時我告訴朋友,如果參考的物件是資料表或檢視表就不會確認,
這是因為SQL Server的延遲名稱解析及編譯所造成的,
在建立SP時,SQL Server只會剖析語法是否正確,
而所參考的資料表或檢視表並不必存在,只要執行時存在即可,
因為這樣我做了一些小小測試,
看看是否真只有資料表或檢視表才能使用延遲名稱解析及編譯
資料庫現有物件
測試一:
SP中參考資料表和檢視表
可以看到查詢視窗出現物件名稱無效警告,但因為延遲名稱解析及編譯的特性,
所以依然可以建立該SP,且不會顯示任何警告或錯誤訊息.
測試二:
SP中參考其他SP
雖然也是可以建立該SP,但會確認所參考的物件是否存在.同時也會顯示警告訊息.
測試三:
SP中參考伺服器物件
可以看到無法建立該SP,同時也會顯示相關錯誤訊息.
結論:
經過一些小小測試,果然只有資料表和檢視表可以使用延遲名稱解析及編譯,
雖然這是一個小問題,但沒聽過延遲名稱解析及編譯的人,
可能就會對我說: SQL Server有Bug,SQL Server 好神奇之類的話...
參考
延遲名稱解析及編譯