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.