sql >> Databasteknik >  >> RDS >> Sqlserver

Fixa "Minst ett av argumenten till COALESCE måste vara ett uttryck som inte är NULL-konstanten" i SQL Server

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.


  1. Var får jag libpq-källan?

  2. Skapa en skalär användardefinierad funktion i SQL Server

  3. Hur använder man mysqli-förberedda uttalanden?

  4. Ansluter till SQL Server 2012 med sqlalchemy och pyodbc