Většinou byste s tím neměli nic dělat.
- Upozornění je možné deaktivovat nastavením
ansi_warnings
vypnuto, ale to má jiné účinky, např. o tom, jak se zachází s dělením nulou a může způsobit selhání, když vaše dotazy používají funkce, jako jsou indexovaná zobrazení, počítané sloupce nebo metody XML. - V některých omezených případech můžete agregát přepsat, abyste tomu zabránili. např.
COUNT(nullable_column)
lze přepsat jakoSUM(CASE WHEN nullable_column IS NULL THEN 0 ELSE 1 END)
ale to není vždy možné udělat přímo bez změny sémantiky.
Je to pouze informační zpráva vyžadovaná standardem SQL. Kromě přidání nežádoucího šumu do streamu zpráv to nemá žádné škodlivé účinky (kromě toho, že SQL Server nemůže jen obejít čtení NULL
řádky, které mohou mít režii, ale deaktivace varování neposkytuje v tomto ohledu lepší plány provádění)
Důvodem pro vrácení této zprávy je, že ve většině operací v SQL se množí hodnoty null.
SELECT NULL + 3 + 7
vrátí NULL
(pokud jde o NULL
jako neznámá veličina to dává smysl jako ? + 3 + 7
je také neznámý)
ale
SELECT SUM(N)
FROM (VALUES (NULL),
(3),
(7)) V(N)
Vrátí 10
a varování, že hodnoty null byly ignorovány.
Toto je však přesně ta sémantika, kterou chcete pro typické agregační dotazy. Jinak přítomnost jediného NULL
znamenalo by to, že agregace v tomto sloupci ve všech řádcích by vždy vedly k NULL
což není příliš užitečné.
Který je níže nejtěžší dort? (Zdroj obrázku, obrázek Creative Commons pozměněný (oříznutý a opatřený poznámkami) mnou)
Po zvážení třetího dortu se váhy rozbily, takže o čtvrtém dortu nejsou k dispozici žádné informace, ale přesto bylo možné změřit obvod.
+--------+--------+---------------+
| CakeId | Weight | Circumference |
+--------+--------+---------------+
| 1 | 50 | 12.0 |
| 2 | 80 | 14.2 |
| 3 | 70 | 13.7 |
| 4 | NULL | 13.4 |
+--------+--------+---------------+
Dotaz
SELECT MAX(Weight) AS MaxWeight,
AVG(Circumference) AS AvgCircumference
FROM Cakes
Vrátí
+-----------+------------------+
| MaxWeight | AvgCircumference |
+-----------+------------------+
| 80 | 13.325 |
+-----------+------------------+
i když technicky není možné s jistotou říci, že 80 byla hmotnost nejtěžšího koláče (protože neznámé číslo může být větší), výsledky výše jsou obecně užitečnější než prosté vrácení neznámého.
+-----------+------------------+
| MaxWeight | AvgCircumference |
+-----------+------------------+
| ? | 13.325 |
+-----------+------------------+
Je tedy pravděpodobné, že chcete, aby byly hodnoty NULL ignorovány, a varování vás pouze upozorní na skutečnost, že se to děje.