修正: クエリを実行するとエラー メッセージ「非 NULL が列の値を NULL に設定しようとしています」関数を使用して、ISNULL() SQL Server 2008 で null 許容の列の値を選択します。

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

現象

次のような状況を考えます。
  • Microsoft SQL Server 2008 では、 ISNULL()関数を使用して、null 許容の列にある値を選択するクエリを実行します。
  • Null 許容の列を含むテーブルは、null 許容の列で別のテーブルに参加しています。
  • クエリ オプティマイザーによって作成されたクエリ プランは、ハッシュ結合、スプール、または結合演算子は、次の並べ替えのテーブルを使用します。
この場合、次のようなエラー メッセージが表示されます。
Msg 681、レベル 16、状態 3、行 2

NULL が列の値を NULL に設定しようとしています。

原因

クエリ オプティマイザーは、 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 SQL Server 2008 Service Pack 1 がリリースされた後にリリースされたビルドします。
特定の SQL Server のサービス パックには、Microsoft SQL Server 2008 の修正プログラムが作成されます。SQL Server 2008 Service Pack 1 のインストールには、SQL Server 2008 Service Pack 1 の修正プログラムを適用する必要があります。既定では、SQL Server のサービス パックで提供されているすべての修正プログラムは次の SQL Server のサービス パックに含まれます。

回避策

この問題を回避するには、次の方法のいずれかを使用します。

方法 1

ISNULL()関数をクエリから削除します。

この関数に含まれる列に NULL 値を拒否するJOIN演算子からはため、 ISNULL()関数は冗長です。

方法 2

ハッシュ結合、スプール、または並べ替えのテーブル クエリ プランが使用されないように、クエリを書き直します。たとえば、クエリに ORDER BY 句が含まれている場合をカバーする、またはクラスター化インデックスで必要な順序を提供し、必要なすべての列が含まれていますを作成します。このメソッドを使用して、クエリ オプティマイザーは、並べ替えのテーブルを使用しません。

状況

マイクロソフトは、この問題を「対象製品」セクションに記載されているマイクロソフト製品の問題として認識しています。

関連情報

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

935897 「の増分サービス モデルは、SQL Server チームは、報告された問題に対する修正プログラムを提供



SQL Server の更新プログラムの名前付けスキーマの詳細については、マイクロソフト サポート技術情報の資料を参照するのには次の資料番号をクリックします。

822499Microsoft SQL Server ソフトウェア更新プログラム パッケージに新しい命名方式


ソフトウェア更新プログラムの用語の詳細については、次の文書番号をクリックして、マイクロソフト サポート技術情報の資料を参照してください。
824684マイクロソフトのソフトウェア更新プログラムを記述するために使用される一般的な用語説明
プロパティ

文書番号:981037 - 最終更新日: 2017/02/06 - リビジョン: 1

フィードバック