sql >> Database >  >> RDS >> Sqlserver

Fix "Ten minste één van de argumenten voor COALESCE moet een expressie zijn die niet de NULL-constante is" in SQL Server

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.


  1. Hoe gebruik je opsommingen in Oracle?

  2. Detecteer opeenvolgende datumbereiken met behulp van SQL

  3. Reguliere expressie (RegEx) voor IPv6 gescheiden van IPv4

  4. Hoe SQLite-lengte() werkt