Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Napraw „Przynajmniej jeden z argumentów COALESCE musi być wyrażeniem, które nie jest stałą NULL” w SQL Server

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ułatw wydajność SQL Server

  2. Konfigurowanie i konfigurowanie zawsze włączonej grupy dostępności w SQL Server

  3. Niepoprawna składnia w pobliżu ''

  4. Używanie zmiennej w instrukcji SQL LIKE

  5. Uzyskaj daty z numeru tygodnia w T-SQL