Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Correction "Au moins un des arguments de COALESCE doit être une expression qui n'est pas la constante NULL" dans SQL Server

Dans SQL Server, si vous obtenez l'erreur Msg 4127 indiquant "Au moins un des arguments de COALESCE doit être une expression qui n'est pas la constante NULL", c'est probablement parce que tous vos arguments de COALESCE() l'expression sont les NULL constante.

Pour résoudre ce problème, assurez-vous qu'au moins un argument n'est pas le NULL constante.

Exemple d'erreur

Voici un exemple de code qui génère cette erreur :

SELECT COALESCE( null, null );

Nous obtenons ceci :

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.

Dans ce cas, tous les arguments étaient les NULL constante, et donc une erreur a été renvoyée.

Solution

La solution est simple. Tout ce que nous devons faire est de nous assurer qu'au moins un argument n'est pas le NULL constante :

SELECT COALESCE(null, 'Cat', 'Dog');

Résultat :

Cat

Dans ce cas, Cat était le premier non-NULL argument, et donc COALESCE() renvoyé cette valeur.

Comme on le voit ici, il est correct d'inclure le NULL constante comme argument, tant qu'il y a aussi au moins un autre argument qui n'est pas le NULL constante.

NULL Expressions et colonnes de base de données

Notez que le NULL constante n'est pas la même chose qu'une expression qui donne NULL . Et ce n'est pas la même chose qu'une colonne de base de données qui contient NULL .

Par exemple, si tous les arguments font référence à des colonnes de base de données et que ces colonnes de base de données sont NULL , alors nous n'obtenons pas l'erreur.

Supposons que nous lancions la requête suivante :

SELECT CustomerId, CustomerCategoryId
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1;

Résultat :

CustomerId  CustomerCategoryId
----------- ------------------
NULL        NULL

Les deux colonnes contiennent NULL valeurs.

Donc, si nous passons les deux colonnes à COALESCE() , nous obtenons un résultat de NULL :

SELECT COALESCE( CustomerId, CustomerCategoryId )
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1;

Résultat :

NULL

Il en va de même si nous remplaçons une des colonnes par le NULL constante :

SELECT COALESCE( CustomerId, null )
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1;

Résultat :

NULL

Donc c'est seulement quand tous les arguments sont les NULL constante que nous obtenons une erreur.