Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Fix „Mindestens eines der Argumente für COALESCE muss ein Ausdruck sein, der nicht die NULL-Konstante ist“ in SQL Server

Wenn Sie in SQL Server die Fehlermeldung 4127 erhalten, die lautet:„Mindestens eines der Argumente für COALESCE muss ein Ausdruck sein, der nicht die NULL-Konstante ist“, liegt dies wahrscheinlich daran, dass alle Ihre Argumente für COALESCE() Ausdruck sind die NULL konstant.

Um dieses Problem zu beheben, stellen Sie sicher, dass mindestens ein Argument nicht NULL ist konstant.

Fehlerbeispiel

Hier ist ein Codebeispiel, das diesen Fehler erzeugt:

SELECT COALESCE( null, null );

Wir bekommen das:

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.

In diesem Fall waren alle Argumente NULL konstant, daher wurde ein Fehler zurückgegeben.

Lösung

Die Lösung ist einfach. Alles, was wir tun müssen, ist sicherzustellen, dass mindestens ein Argument nicht NULL ist Konstante:

SELECT COALESCE(null, 'Cat', 'Dog');

Ergebnis:

Cat

In diesem Fall Cat war der erste Nicht-NULL Argument, und so COALESCE() diesen Wert zurückgegeben.

Wie hier zu sehen, ist es in Ordnung, den NULL einzuschließen konstant als Argument, solange es noch mindestens ein anderes Argument gibt, das nicht ist der NULL konstant.

NULL Ausdrücke und Datenbankspalten

Beachten Sie, dass NULL Konstante ist nicht dasselbe wie ein Ausdruck, der NULL ergibt . Und es ist nicht dasselbe wie eine Datenbankspalte, die NULL enthält .

Zum Beispiel, wenn alle Argumente auf Datenbankspalten verweisen und diese Datenbankspalten NULL sind , dann bekommen wir den Fehler nicht.

Angenommen, wir führen die folgende Abfrage aus:

SELECT CustomerId, CustomerCategoryId
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1;

Ergebnis:

CustomerId  CustomerCategoryId
----------- ------------------
NULL        NULL

Beide Spalten enthalten NULL Werte.

Übergeben wir also beide Spalten an COALESCE() , erhalten wir als Ergebnis NULL :

SELECT COALESCE( CustomerId, CustomerCategoryId )
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1;

Ergebnis:

NULL

Dasselbe gilt, wenn wir eine der Spalten durch NULL ersetzen Konstante:

SELECT COALESCE( CustomerId, null )
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1;

Ergebnis:

NULL

Also nur wenn alle Argumente sind NULL konstant, dass wir einen Fehler erhalten.