I SQL Server, om du får felmeddelandet Msg 4127 som lyder "Minst ett av argumenten till COALESCE måste vara ett uttryck som inte är NULL-konstanten", beror det förmodligen på att alla dina argument till COALESCE()
uttryck är NULL
konstant.
För att åtgärda det här problemet, se till att minst ett argument inte är NULL
konstant.
Exempel på fel
Här är ett exempel på kod som ger det här felet:
SELECT COALESCE( null, null );
Vi får det här:
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 det här fallet var alla argument NULL
konstant, så ett fel returnerades.
Lösning
Lösningen är enkel. Allt vi behöver göra är att se till att minst ett argument inte är NULL
konstant:
SELECT COALESCE(null, 'Cat', 'Dog');
Resultat:
Cat
I det här fallet, Cat
var den första icke-NULL
argument och så COALESCE()
returnerade det värdet.
Som du ser här är det OK att inkludera NULL
konstant som ett argument, så länge det också finns minst ett annat argument som inte är NULL
konstant.
NULL
Uttryck och databaskolumner
Observera att NULL
konstant är inte detsamma som ett uttryck som resulterar i NULL
. Och det är inte samma sak som en databaskolumn som innehåller NULL
.
Till exempel, om alla argument refererar till databaskolumner och dessa databaskolumner är NULL
, då får vi inte felet.
Anta att vi kör följande fråga:
SELECT CustomerId, CustomerCategoryId
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1;
Resultat:
CustomerId CustomerCategoryId ----------- ------------------ NULL NULL
Båda kolumnerna innehåller NULL
värden.
Så om vi skickar båda kolumnerna till COALESCE()
, får vi ett resultat av NULL
:
SELECT COALESCE( CustomerId, CustomerCategoryId )
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1;
Resultat:
NULL
Detsamma gäller om vi ersätter en av kolumnerna med NULL
konstant:
SELECT COALESCE( CustomerId, null )
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1;
Resultat:
NULL
Så det är bara när alla argument är NULL
konstant att vi får ett fel.