創建該存儲過程時,不會出錯,但是執行存儲過程時,會報出下面這樣的錯誤
這是因為在存儲過程創建時,它先做語法檢查,如果通過了語法檢查,它會嘗試解析它包含的對象名,如果存在也會解析該對象引用的對象是否存在。如果引用的對象名不存在,解析會在存儲過程首次執行時觸發。即在首次執行存儲過程時,查詢處理器從 sys.sql_modules 目錄視圖中讀取該存儲過程的文本,並檢查該過程所使用的對象名稱是否存在。這一過程稱為延遲名稱解析,因為存儲過程引用的表對象不需要在創建該存儲過程時就存在,而只需在執行該存儲過程時存在。
注意:
只有當引用的表對象不存在時才能使用延遲名稱解析。所有其他對象在創建所存儲的過程時必須存在。例如,引用所存儲的過程中的一個現有表時,不能列出該表不存在的列。
---存儲過程刪除中間表R_LDBG_B1_TEMP,但這條沒執行成功。
if OBJECT_ID('R_LDBG_B1_TEMP','U') IS NOT NULL
drop table R_LDBG_B1_TEMP
原因分析: R_LDBG_B1_TEMP表字段結構在執行另一個存儲過程時發生變化導致其它存儲過程引用了不存在的字段。
執行存儲過程時先解析,當發現引用表中不存在的字段就會直接報錯,無法執行。
有兩個解決辦法:
1) 在外部編程執行存儲過程前刪除中間表。
2) 在存儲過程內部執行最后刪除中間表。