För det mesta bör du inte göra något åt det.
- Det är möjligt att inaktivera varningen genom att ställa in
ansi_warnings
av men detta har andra effekter, t.ex. om hur division med noll hanteras och kan orsaka misslyckanden när dina frågor använder funktioner som indexerade vyer, beräknade kolumner eller XML-metoder. - I vissa begränsade fall kan du skriva om aggregatet för att undvika det. t.ex.
COUNT(nullable_column)
kan skrivas om somSUM(CASE WHEN nullable_column IS NULL THEN 0 ELSE 1 END)
men detta är inte alltid möjligt att göra enkelt utan att ändra semantiken.
Det är bara ett informationsmeddelande som krävs i SQL-standarden. Förutom att lägga till oönskat brus till meddelandeströmmen har det inga negativa effekter (förutom att SQL Server inte bara kan kringgå läsning av NULL
rader, som kan ha en overhead men att inaktivera varningen ger inte bättre utförandeplaner i detta avseende)
Anledningen till att det här meddelandet returneras är att de flesta operationer i SQL sprider sig nollvärden.
SELECT NULL + 3 + 7
returnerar NULL
(avseende NULL
som en okänd kvantitet är detta vettigt som ? + 3 + 7
är också okänd)
men
SELECT SUM(N)
FROM (VALUES (NULL),
(3),
(7)) V(N)
Returnerar 10
och varningen om att nollor ignorerades.
Men det här är exakt den semantik du vill ha för typiska aggregeringsfrågor. Annars förekomsten av en enda NULL
skulle innebära att aggregering av den kolumnen över alla rader alltid skulle ge NULL
vilket inte är särskilt användbart.
Vilken är den tyngsta kakan nedan? (Bildkälla, Creative Commons-bild ändrad (beskuren och kommenterad) av mig)
Efter att den tredje tårtan vägts gick vågen sönder och det finns ingen information om den fjärde, men det var fortfarande möjligt att mäta omkretsen.
+--------+--------+---------------+
| CakeId | Weight | Circumference |
+--------+--------+---------------+
| 1 | 50 | 12.0 |
| 2 | 80 | 14.2 |
| 3 | 70 | 13.7 |
| 4 | NULL | 13.4 |
+--------+--------+---------------+
Frågan
SELECT MAX(Weight) AS MaxWeight,
AVG(Circumference) AS AvgCircumference
FROM Cakes
Retur
+-----------+------------------+
| MaxWeight | AvgCircumference |
+-----------+------------------+
| 80 | 13.325 |
+-----------+------------------+
även om det tekniskt inte är möjligt att med säkerhet säga att 80 var vikten av den tyngsta kakan (eftersom det okända antalet kan vara större) är resultaten ovan generellt sett mer användbara än att bara returnera okända.
+-----------+------------------+
| MaxWeight | AvgCircumference |
+-----------+------------------+
| ? | 13.325 |
+-----------+------------------+
Så troligtvis vill du att NULL-värden ska ignoreras, och varningen uppmärksammar dig bara på att detta händer.