現象
次のような状況で問題が発生します。
-
Sql Server 2014 または SQL Server 2012 で手順を実行します。
-
プロシージャにクエリが含まれている場合、次の条件があります。
-
頻繁に更新されるテーブルを結合します。
-
パラメーターを含む WHERE 句が含まれています。
-
Option (再コンパイル) を使用します。
-
-
この手順は、パラメーター値のセットが異なる複数の同時接続で実行されます。
-
サーバーの負荷が高いため、これらの各手順は通常より時間がかかります。
このシナリオでは、クエリのコンパイルが終了するまでの間に発生した時間間隔の間に、接続で実行される次のような条件が満たされている場合に、正しくない結果が表示されることがあります。
-
条件 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 の最新の累積的な更新プログラムを確認します。
状態
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。