BUG #: 129341 (Content Maintenance)VSTS bug number: 409769

マイクロソフトは、1 つのダウンロード可能なファイルとして Microsoft SQL Server 2008の修正プログラムを配布します。 修正プログラムは累積的であるため、新しいリリースごとにすべての修正プログラムが含まれていて、以前の SQL Server 2008 に含まれていたすべてのセキュリティ修正プログラムの更新プログラムのリリースします。

現象

次のような状況で問題が発生します。

  • Microsoft SQL Server 2008 では、 ISNULL()関数を使用して、null 許容の列にある値を選択するクエリを実行します。

  • Null 許容の列を含むテーブルは、null 許容の列で別のテーブルに参加しています。

  • クエリ オプティマイザーによって作成されたクエリ プランは、ハッシュ結合、スプール、または結合演算子は、次の並べ替えのテーブルを使用します。

このとき、次のエラー メッセージが表示されます。

Msg 681、レベル 16、状態 3、NULL が列の値を NULL に設定する行の 2Attempting です。

原因

クエリ オプティマイザーは、 ISNULL()関数で参照されている列が null 非許容の結合演算子は、NULL 値を拒否したためを決定します。 クエリ オプティマイザーは、クエリ プランでISNULL()関数、 JOIN演算子の下にある式をプッシュします。 さらに、式の値は NULL にできます。 ただし、クエリ オプティマイザーは、式の null 許可属性プロパティを再派生できません。 その後、クエリ プランでは、ハッシュ結合、スプール、または並べ替えの条件式を含むテーブルを実装するためにワーク ・ テーブルが使用されます。 さらに、ワーク ・ テーブルの対応する列は、null 非許容として宣言されています。 ワーク ・ テーブルに NULL 値を挿入しようとすると、SQL Server クエリ エンジンのエラーが発生します。

解決方法

この問題の修正は、SQL Server 2008 Service Pack 1 用の累積的な更新プログラム 7 で初めてリリースされました。この累積的な更新プログラム パッケージの詳細については、マイクロソフト サポート技術情報の記事を表示するのには次の資料番号をクリックします。

979065 SQL Server 2008 Service Pack 1 用の累積的な更新プログラム パッケージ 7注: ビルドは累積的であるため、各新しい修正プログラム リリースには、すべての修正プログラムが含まれていて、以前の SQL Server 2008 に含まれていたすべてのセキュリティ修正プログラムの更新プログラムのリリースします。 この修正プログラムを含む最新の修正プログラム リリースを適用することを検討することをお勧めします。 詳細については、次のマイクロソフト サポート技術情報番号をクリックしてください。

970365 SQL Server 2008 Service Pack 1 がリリースされた後にリリースされた SQL Server 2008 ビルド特定の SQL Server のサービス パックには、Microsoft SQL Server 2008 の修正プログラムが作成されます。 SQL Server 2008 Service Pack 1 のインストールには、SQL Server 2008 Service Pack 1 の修正プログラムを適用する必要があります。 既定では、SQL Server のサービス パックで提供されているすべての修正プログラムは次の SQL Server のサービス パックに含まれます。

回避策

この問題を回避するには、以下のいずれかの方法を使用します。方法 1ISNULL()関数をクエリから削除します。 注:この関数に含まれる列に NULL 値を拒否するJOIN演算子からはため、 ISNULL()関数は冗長です。方法 2ハッシュ結合、スプール、または並べ替えのテーブル クエリ プランが使用されないように、クエリを書き直します。 たとえば、クエリに ORDER BY 句が含まれている場合をカバーする、またはクラスター化インデックスで必要な順序を提供し、必要なすべての列が含まれていますを作成します。 このメソッドを使用して、クエリ オプティマイザーは、並べ替えのテーブルを使用しません。

状態

マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。

関連情報

SQL Server の増分サービス モデルの詳細については、マイクロソフト サポート技術情報の記事を表示するのには次の資料番号をクリックします。

935897 報告された問題に対する修正プログラムを提供する SQL Server チームの増分サービス モデルがあります。SQL Server の更新プログラムの名前付けスキーマの詳細については、マイクロソフト サポート技術情報の資料を参照するのには次の資料番号をクリックします。

822499Microsoft SQL Server ソフトウェア更新プログラム パッケージに新しい命名方式ソフトウェア更新プログラムの用語の詳細については、次の文書番号をクリックして、マイクロソフト サポート技術情報の資料を参照してください。

824684 マイクロソフトのソフトウェアの更新で使用される一般的な用語の説明

Author (SME): bruceyeWriter: v-vincliTech Reviewer: jpilov; alexek; rajneeshEditor: v-chliao

ヘルプを表示

その他のオプションが必要ですか?

サブスクリプションの特典の参照、トレーニング コースの閲覧、デバイスのセキュリティ保護方法などについて説明します。

コミュニティは、質問をしたり質問の答えを得たり、フィードバックを提供したり、豊富な知識を持つ専門家の意見を聞いたりするのに役立ちます。