Als u in SQL Server de fout Msg 4127 krijgt die luidt:"Ten minste één van de argumenten voor COALESCE moet een uitdrukking zijn die niet de NULL-constante is", komt dit waarschijnlijk omdat al uw argumenten voor de COALESCE()
expressie zijn de NULL
constant.
Om dit probleem op te lossen, moet u ervoor zorgen dat ten minste één argument niet de NULL
. is constant.
Voorbeeld van fout
Hier is een voorbeeld van code die deze fout veroorzaakt:
SELECT COALESCE( null, null );
We krijgen dit:
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 dit geval waren alle argumenten de NULL
constant, en dus werd er een fout geretourneerd.
Oplossing
De oplossing is eenvoudig. Het enige wat we moeten doen is ervoor zorgen dat ten minste één argument niet de NULL
. is constante:
SELECT COALESCE(null, 'Cat', 'Dog');
Resultaat:
Cat
In dit geval Cat
was de eerste niet-NULL
argument, en dus COALESCE()
heeft die waarde geretourneerd.
Zoals hier te zien is, is het OK om de NULL
. op te nemen constant als een argument, zolang er ook minstens één ander argument is dat niet . is de NULL
constant.
NULL
Uitdrukkingen en databasekolommen
Merk op dat de NULL
constante is niet hetzelfde als een uitdrukking die resulteert in NULL
. En het is niet hetzelfde als een databasekolom die NULL
. bevat .
Als alle argumenten bijvoorbeeld verwijzen naar databasekolommen en die databasekolommen NULL
. zijn , dan krijgen we de fout niet.
Stel dat we de volgende query uitvoeren:
SELECT CustomerId, CustomerCategoryId
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1;
Resultaat:
CustomerId CustomerCategoryId ----------- ------------------ NULL NULL
Beide kolommen bevatten NULL
waarden.
Dus als we beide kolommen doorgeven aan COALESCE()
, krijgen we een resultaat van NULL
:
SELECT COALESCE( CustomerId, CustomerCategoryId )
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1;
Resultaat:
NULL
Hetzelfde geldt als we een van de kolommen vervangen door de NULL
constante:
SELECT COALESCE( CustomerId, null )
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1;
Resultaat:
NULL
Dus het is alleen wanneer alle argumenten zijn de NULL
constant dat we een foutmelding krijgen.