Przeważnie nie powinieneś nic z tym robić.
- Możliwe jest wyłączenie ostrzeżenia poprzez ustawienie
ansi_warnings
wyłączone, ale ma to inne skutki, m.in. o tym, jak obsługiwane jest dzielenie przez zero i może powodować błędy, gdy Twoje zapytania używają funkcji, takich jak widoki indeksowane, kolumny obliczane lub metody XML. - W niektórych ograniczonych przypadkach możesz przepisać agregat, aby go uniknąć. np.
COUNT(nullable_column)
może być przepisany jakoSUM(CASE WHEN nullable_column IS NULL THEN 0 ELSE 1 END)
ale nie zawsze można to zrobić bezpośrednio bez zmiany semantyki.
To tylko komunikat informacyjny wymagany w standardzie SQL. Oprócz dodawania niechcianych szumów do strumienia wiadomości, nie ma to złych efektów (poza tym, że SQL Server nie może po prostu ominąć czytania NULL
wierszy, które mogą mieć narzut, ale wyłączenie ostrzeżenia nie zapewnia lepszych planów wykonania w tym zakresie)
Powodem zwrócenia tego komunikatu jest to, że przez większość operacji w SQL rozprzestrzeniają się null.
SELECT NULL + 3 + 7
zwraca NULL
(dotyczy NULL
jako nieznana wielkość ma to sens jako ? + 3 + 7
jest również nieznany)
ale
SELECT SUM(N)
FROM (VALUES (NULL),
(3),
(7)) V(N)
Zwraca 10
i ostrzeżenie, że wartości null zostały zignorowane.
Jednak są to dokładnie semantyka, której potrzebujesz dla typowych zapytań agregujących. W przeciwnym razie obecność pojedynczego NULL
oznaczałoby, że agregacje w tej kolumnie we wszystkich wierszach zawsze dałyby wynik NULL
co nie jest zbyt przydatne.
Które ciasto jest najcięższe poniżej? (Źródło obrazu, obraz na licencji Creative Commons zmieniony (przycięty i opatrzony adnotacjami) przeze mnie)
Po zważeniu trzeciego ciasta waga pękła, więc nie ma informacji o czwartym, ale nadal można było zmierzyć obwód.
+--------+--------+---------------+
| CakeId | Weight | Circumference |
+--------+--------+---------------+
| 1 | 50 | 12.0 |
| 2 | 80 | 14.2 |
| 3 | 70 | 13.7 |
| 4 | NULL | 13.4 |
+--------+--------+---------------+
Zapytanie
SELECT MAX(Weight) AS MaxWeight,
AVG(Circumference) AS AvgCircumference
FROM Cakes
Zwroty
+-----------+------------------+
| MaxWeight | AvgCircumference |
+-----------+------------------+
| 80 | 13.325 |
+-----------+------------------+
chociaż technicznie nie można powiedzieć z całą pewnością, że 80 było wagą najcięższego ciasta (ponieważ nieznana liczba może być większa), powyższe wyniki są ogólnie bardziej przydatne niż po prostu zwracanie nieznanego.
+-----------+------------------+
| MaxWeight | AvgCircumference |
+-----------+------------------+
| ? | 13.325 |
+-----------+------------------+
Najprawdopodobniej chcesz, aby zignorowano wartości NULL, a ostrzeżenie po prostu informuje o tym, że tak się dzieje.