Microsoft は、Microsoft SQL Server 2008 R2 の修正プログラムを1つのダウンロード可能なファイルとして配布します。 修正プログラムは累積的であるため、新しいリリースごとに、以前の SQL Server 2008 R2 fix release に含まれていたすべての修正プログラムとセキュリティの修正プログラムが含まれています。
現象
Microsoft SQL Server 2008 R2 で、 APPLY 演算子を使う複雑なクエリを実行すると、矛盾した結果が表示されることがあります。 注: クエリで強制順序 クエリのヒントを使用すると、このシナリオで適切な結果が得られます。
原因
この問題は、クエリオプティマイザーがクエリの不正な実行プランを選択したために発生します。 クエリオプティマイザーは、実行プランの物理演算子で、複数列の GROUP BY述語を処理します。 ただし、演算子は、すべてのグループ化された列を出力リストに出力し、これらのすべての列をグループ化しません。 そのため、クエリで間違った結果が返されることがあります。 注: 物理演算子の例として、 ストリーム集計 演算子があります。たとえば、クエリオプティマイザーは、次のテーブルに対して内部的に ColA と ColB 句でグループを生成します。
ColA |
ColB |
---|---|
0 |
0 |
0 |
件 |
クエリオプティマイザーで、 ColA 列と colb列の両方を返す実行プランが誤って生成されることがあります。 これらの列は、出力リストのColA列によってグループ化されています。 この例では、 ColA列の値が0の場合、 colb列でクエリがランダムに0または1を返すことがあります。
解決方法
累積的な更新プログラムの情報
SQL Server 2008 R2
この問題の修正プログラムは、累積的な更新プログラム5で最初にリリースされました。SQL Server 2008 R2 用の累積的な更新プログラムパッケージの入手方法の詳細については、次の記事番号をクリックして、Microsoft サポート技術情報の記事を参照してください。
2438347 SQL Server 2008 R2 の累積的な更新プログラムパッケージ5 注: ビルドは累積的であるため、各新しい修正プログラムには、以前の SQL Server 2008 R2 fix release に含まれていたすべての修正プログラムとセキュリティ修正プログラムが含まれています。 この修正プログラムを含む最新の修正プログラムを適用することを検討することをお勧めします。 詳細については、次のマイクロソフト サポート技術情報番号をクリックしてください。
981356 SQL Server 2008 R2 のリリース後にリリースされた SQL Server 2008 R2 ビルド
状態
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。
詳細情報
この問題が発生していることを確認するには、問題のあるクエリの実行計画を確認し、グループの演算子を確認します。 たとえば、ストリーム集計演算子、ハッシュ集計演算子、distinct 並べ替え演算子、およびセグメント演算子を確認します。 出力列のリストがグループ化された列のリストよりも長い場合は、この問題が発生しています。
参照情報
SQL Server の段階的サービスモデルの詳細については、次の記事番号をクリックして、Microsoft サポート技術情報の記事を参照してください。
935897 SQL Server チームが段階的なサービスモデルを利用して、報告された問題の修正プログラムを提供するSQL Server 更新プログラムの名前付けスキーマの詳細については、次の記事番号をクリックして、Microsoft サポート技術情報の記事を参照してください。
822499Microsoft SQL Server ソフトウェア更新プログラムパッケージの新しい名前付けスキーマソフトウェア更新プログラムの用語の詳細については、次の記事番号をクリックして、Microsoft サポート技術情報の記事を参照してください。
824684 マイクロソフトのソフトウェアの更新で使用される一般的な用語の説明