I SQL Server, hvis du får fejlmeddelelsen Msg 4127, der lyder "Mindst et af argumenterne til COALESCE skal være et udtryk, der ikke er NULL-konstanten", er det sandsynligvis fordi alle dine argumenter til COALESCE()
udtryk er NULL
konstant.
For at løse dette problem skal du sørge for, at mindst ét argument ikke er NULL
konstant.
Eksempel på fejl
Her er et eksempel på kode, der producerer denne fejl:
SELECT COALESCE( null, null );
Vi får dette:
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.
I dette tilfælde var alle argumenter NULL
konstant, og derfor blev der returneret en fejl.
Løsning
Løsningen er nem. Det eneste, vi skal gøre, er at sikre, at mindst ét argument ikke er NULL
konstant:
SELECT COALESCE(null, 'Cat', 'Dog');
Resultat:
Cat
I dette tilfælde Cat
var den første ikke-NULL
argument, og så COALESCE()
returnerede den værdi.
Som det ses her, er det OK at inkludere NULL
konstant som et argument, så længe der også er mindst ét andet argument, der ikke er NULL
konstant.
NULL
Udtryk og databasekolonner
Bemærk, at NULL
konstant er ikke det samme som et udtryk, der resulterer i NULL
. Og det er ikke det samme som en databasekolonne, der indeholder NULL
.
For eksempel, hvis alle argumenter refererer til databasekolonner, og disse databasekolonner er NULL
, så får vi ikke fejlen.
Antag, at vi kører følgende forespørgsel:
SELECT CustomerId, CustomerCategoryId
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1;
Resultat:
CustomerId CustomerCategoryId ----------- ------------------ NULL NULL
Begge kolonner indeholder NULL
værdier.
Så hvis vi sender begge kolonner til COALESCE()
, får vi et resultat af NULL
:
SELECT COALESCE( CustomerId, CustomerCategoryId )
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1;
Resultat:
NULL
Det samme gælder, hvis vi erstatter en af kolonnerne med NULL
konstant:
SELECT COALESCE( CustomerId, null )
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1;
Resultat:
NULL
Så det er kun, når alle argumenter er NULL
konstant, at vi får en fejl.