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.