ほとんどの場合、それについては何もするべきではありません。
-
ansi_warnings
を設定すると、警告を無効にすることができます オフですが、これには他の効果があります。ゼロによる除算がどのように処理され、クエリがインデックス付きビュー、計算列、XMLメソッドなどの機能を使用する場合に失敗を引き起こす可能性があるかについて。 - 一部の限られたケースでは、それを回避するためにアグリゲートを書き直すことができます。例えば
COUNT(nullable_column)
SUM(CASE WHEN nullable_column IS NULL THEN 0 ELSE 1 END)
として書き換えることができます。 ただし、これはセマンティクスを変更せずに簡単に実行できるとは限りません。
これは、SQL標準で必要な単なる情報メッセージです。メッセージストリームに不要なノイズを追加することを除けば、悪影響はありません(SQLServerがNULL
の読み取りをバイパスできないことを意味します。 行。オーバーヘッドが発生する可能性がありますが、警告を無効にしても、この点でより良い実行プランは得られません)
このメッセージを返す理由は、SQLnullのほとんどの操作全体で伝播するためです。
SELECT NULL + 3 + 7
NULL
を返します (NULL
に関して 未知の量として、これは? + 3 + 7
も不明です)
しかし
SELECT SUM(N)
FROM (VALUES (NULL),
(3),
(7)) V(N)
10
を返します ヌルが無視されたという警告。
ただし、これらはまさに必要なセマンティクスです。 一般的な集計クエリの場合。それ以外の場合は、単一のNULL
が存在します つまり、すべての行にわたるその列の集計は、常にNULL
を生成することになります。 これはあまり役に立ちません。
下の最も重いケーキはどれですか? (画像ソース、クリエイティブ・コモンズの画像は私が変更(トリミングおよび注釈付き))
3番目のケーキの重さを量った後、はかりが壊れたため、4番目のケーキに関する情報はありませんが、それでも円周を測定することはできました。
+--------+--------+---------------+
| CakeId | Weight | Circumference |
+--------+--------+---------------+
| 1 | 50 | 12.0 |
| 2 | 80 | 14.2 |
| 3 | 70 | 13.7 |
| 4 | NULL | 13.4 |
+--------+--------+---------------+
クエリ
SELECT MAX(Weight) AS MaxWeight,
AVG(Circumference) AS AvgCircumference
FROM Cakes
返品
+-----------+------------------+
| MaxWeight | AvgCircumference |
+-----------+------------------+
| 80 | 13.325 |
+-----------+------------------+
技術的には、80が最も重いケーキの重量であると確実に言うことはできませんが(不明な数の方が大きい場合があるため)、上記の結果は、単に不明なものを返すよりも一般的に有用です。
+-----------+------------------+
| MaxWeight | AvgCircumference |
+-----------+------------------+
| ? | 13.325 |
+-----------+------------------+
したがって、NULLを無視する必要があり、警告はこれが発生しているという事実を警告するだけです。