徵狀
請試想下列案例:
-
您在 Microsoft SQL Server 2014 或 SQL Server 2012 中執行程式。
-
此套裝程式含下列條件的查詢:
-
它會連接較頻繁更新的資料表。
-
它有包含參數的 WHERE 子句。
-
它使用選項(重新編譯)。
-
-
這個程式是在有不同參數值集的多個併發連接上執行。
-
您的伺服器是在導致上述每個程式執行時間比平時更長的大量負載所造成。
在這種情況下,如果在查詢編譯結束與您連線的查詢執行開始之間的時間間隔期間達到下列其他條件,您可能會收到在連線時執行的程式不正確的結果:
-
條件 1:另一個併發連線會對已連接的資料表進行更新,以便在連線時觸發再次編譯查詢。
-
條件 2:相同的查詢已從另一個連線重新編譯,然後放入快取中。
重要 這種時間問題極少見。
原因
發生這個問題的原因是,在您的連線上執行查詢之後,查詢的參數值會變更為不正確的值。 發生這種情況是因為在併發編譯之間存在極少的時間問題。
解決方案
此問題最初是在 SQL Server 的後續累積更新中修正。
SQL Server 2014 的累積更新4 /en-us/help/2999197
SQL Server 2012 SP2 累積更新2 /en-us/help/2983175
SQL Server 2012 SP1 累積更新11 /en-us/help/2975396
每個新的 SQL Server 累計更新都包含所有的修正程式,以及前一個累積更新中所包含的所有安全性修正程式。 查看 SQL Server 的最新累計更新:
狀態
Microsoft 已確認本篇文章<適用於>一節所列之 Microsoft 產品確實有上述問題。