FIX: 執行所有的陳述式,可能會失敗 recompiles 的預存程序的同時執行

文章翻譯 文章翻譯
文章編號: 250506 - 檢視此文章適用的產品。
本文已封存。本文係以「現狀」提供且不會再更新。
Bug #: 55251 (sqlbug_70)
全部展開 | 全部摺疊

徵狀

預存程序可能會以無訊息模式失敗執行所有的陳述式內如果符合下列條件:

  • 多個連線會同時執行相同的程序。

  • 參考是進行此程序之外建立一個暫存資料表。

  • 也可能會導致重新編譯 (可能由 '自動更新統計資料' 觸發) 的一或多個陳述式會遵循此暫存資料表的參考。
所有陳述式可能會執行某些使用者執行該程序,而其他人會失敗。

其他可行方案

建立程序使用 WITH 重新編譯] 子句,或執行程序時使用 WITH 重新編譯子句。

狀況說明

Microsoft 已確認這是 SQL Server 7.0 中的問題。這個問題已經 Microsoft SQL Server 7.0 的美國 Service Pack 2 獲得修正。如需詳細資訊,請按一下下列的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
254561INF: 如何取得 Microsoft SQL Server 7.0 和 Microsoft 資料引擎 (MSDE) 1.0 的 Service Pack 2
如需詳細資訊請連絡主要支援提供者。

其他相關資訊

如果參考對目前的程序之外建立一個暫存資料表,請陳述式和任何後續陳述式可不編譯程序第一次執行時。這是因為沒有資訊知該資料表的結構描述。一旦執行到達該陳述式和結構描述與基數值是可用,程序,會重新編譯使用這項資訊。減到最少的編譯時間,SQL Server 不會是"部分編譯"在此情況下,而且只會產生最多為這一次的陳述式的查詢計畫。

因為多個使用者可以共用已編譯的計劃,SQL Server 7.0 會序列化重新編譯,以確保只有一個連線會執行重新編譯。如果其他連線也需要重新編譯,它們等候第一個連線完成其重新編譯,並繼續執行在其下一個步驟。

如果您遇到的兩個連線執行的各種階段而觸發重新編譯的一個第一次是參照到暫存資料表建立外部程序之前的情況下,則會停止編譯計劃,當它到達該陳述式。如果第二個連線某處在這之後,且也觸發重新編譯,而編譯第一個連線,它繼續執行,並不正確會認為它已計劃中執行所有的陳述式。

如果您使用 WITH 重新編譯,當此程序建立或時它會執行兩個連線永遠不會共用相同的已編譯計劃和永遠不會遇到這種情況。

請盡可能,建議也不來參考目前的程序之外建立一個暫存資料表,如一律需要重新編譯程序。預存程序的其他程式設計作法可以找到"Transact-SQL 秘訣 」 主題下,SQL 線上叢書 》 中。

若要判斷當程序會被重新編譯,您可以監看 SQL Profiler 中的 SP:Recompile 事件。

屬性

文章編號: 250506 - 上次校閱: 2013年10月20日 - 版次: 2.0
這篇文章中的資訊適用於:
  • Microsoft SQL Server 7.0 Standard Edition
關鍵字:?
kbnosurvey kbarchive kbmt kbbug kbfix KB250506 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:250506
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com