修正:當您在 SQL Server 2014 或 SQL Server 2012 中使用選項 (重新編譯) 進行程序內的查詢時,極少數出現不正確結果的情況

套用到
SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2012 Enterprise SQL Server 2012 Developer SQL Server 2012 Express SQL Server 2012 Standard SQL Server 2012 Web SQL Server 2012 Business Intelligence SQL Server 2012 Analysis Services SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard

症狀

請考慮以下案例:

  • 您在 Microsoft SQL Server 2014 或 SQL Server 2012 中執行程序。

  • 程序包含的查詢具有下列條件:

    • 它會聯結非常頻繁更新的資料表。
    • 它有一個包含參數的 WHERE 子句。
    • 它使用選項 (重新編譯) 。
  • 此程序會在具有不同參數值集的多個並行連線上執行。

  • 您的伺服器負載過重,導致這些程序中的每一個花費比平常更多的時間。

在此情況下,如果在查詢編譯結束和連線上查詢執行開始之間的時間間隔內滿足以下其他條件,您可能會從連線上執行的程序收到不正確的結果:

  • 條件 1:另一個並行連線對聯結的資料表進行更新,其大小足以觸發對連線上的查詢進行另一次重新編譯。
  • 條件 2:從另一個連線重新編譯相同的查詢,然後放入快取。

重要:此時間問題極為罕見。

原因

發生此問題的原因是在連線上執行查詢後,查詢的參數值變更為不正確的值。 發生這種情況是因為並行編譯之間存在極罕見的計時問題。

解決方式

此問題已先在下列 SQL Server 累積更新中修正。

SQL Server 2014 累積更新 4 /zh-tw/help/2999197

SQL Server 2012 SP2 的累積更新 2 /zh-tw/help/2983175

SQL Server 2012 SP1 的累積更新 11 /zh-tw/help/2975396

關於 SQL Server 的累積更新

SQL Server 的每個新累積更新都包含所有 Hotfix 和先前累積更新的所有安全性修正程式。 查看 SQL Server 的最新累積更新:

      

狀態

Microsoft 已確認這是「適用對象」一節中列出的 Microsoft 產品中的問題。