Jeśli w programie SQL Server otrzymujesz komunikat o błędzie Msg 4127, który brzmi „Co najmniej jeden z argumentów funkcji COALESCE musi być wyrażeniem, które nie jest stałą NULL”, jest to prawdopodobnie spowodowane tym, że wszystkie argumenty funkcji COALESCE()
wyrażenie to NULL
stała.
Aby rozwiązać ten problem, upewnij się, że co najmniej jeden argument nie jest NULL
stała.
Przykład błędu
Oto przykład kodu, który powoduje ten błąd:
SELECT COALESCE( null, null );
Otrzymujemy to:
Msg 4127, Level 16, State 1, Line 1 At least one of the arguments to COALESCE must be an expression that is not the NULL constant.
W tym przypadku wszystkie argumenty miały wartość NULL
stała, więc został zwrócony błąd.
Rozwiązanie
Rozwiązanie jest proste. Wszystko, co musimy zrobić, to upewnić się, że przynajmniej jeden argument nie jest NULL
stała:
SELECT COALESCE(null, 'Cat', 'Dog');
Wynik:
Cat
W tym przypadku Cat
był pierwszym innym niż NULL
argument, a więc COALESCE()
zwrócił tę wartość.
Jak widać tutaj, można dodać NULL
jako argument, o ile istnieje jeszcze co najmniej jeden inny argument, który nie NULL
stała.
NULL
Wyrażenia i kolumny bazy danych
Zauważ, że NULL
stała nie jest tym samym, co wyrażenie, którego wynikiem jest NULL
. I to nie to samo, co kolumna bazy danych zawierająca NULL
.
Na przykład, jeśli wszystkie argumenty odwołują się do kolumn bazy danych, a te kolumny bazy danych mają wartość NULL
, wtedy błąd nie pojawia się.
Załóżmy, że uruchamiamy następujące zapytanie:
SELECT CustomerId, CustomerCategoryId
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1;
Wynik:
CustomerId CustomerCategoryId ----------- ------------------ NULL NULL
Obie kolumny zawierają NULL
wartości.
Więc jeśli przekażemy obie kolumny do COALESCE()
, otrzymujemy wynik NULL
:
SELECT COALESCE( CustomerId, CustomerCategoryId )
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1;
Wynik:
NULL
To samo dotyczy sytuacji, gdy jedną z kolumn zastąpimy znakiem NULL
stała:
SELECT COALESCE( CustomerId, null )
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1;
Wynik:
NULL
Czyli tylko wtedy, gdy wszystkie argumentami są NULL
stałe, że otrzymujemy błąd.