In SQL Server, se ricevi un messaggio di errore 4127 che dice "Almeno uno degli argomenti di COALESCE deve essere un'espressione che non è la costante NULL", è probabilmente perché tutti i tuoi argomenti per COALESCE()
espressione sono NULL
costante.
Per risolvere questo problema, assicurati che almeno un argomento non sia NULL
costante.
Esempio di errore
Ecco un esempio di codice che produce questo errore:
SELECT COALESCE( null, null );
Otteniamo questo:
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 questo caso, tutti gli argomenti erano NULL
costante, quindi è stato restituito un errore.
Soluzione
La soluzione è facile. Tutto quello che dobbiamo fare è assicurarci che almeno un argomento non sia NULL
costante:
SELECT COALESCE(null, 'Cat', 'Dog');
Risultato:
Cat
In questo caso, Cat
è stato il primo non NULL
argomento, e così COALESCE()
restituito quel valore.
Come visto qui, va bene includere il NULL
costante come argomento, purché sia presente almeno un altro argomento che non è il NULL
costante.
NULL
Espressioni e colonne del database
Nota che il NULL
costante non è la stessa di un'espressione che risulta in NULL
. E non è la stessa cosa di una colonna del database che contiene NULL
.
Ad esempio, se tutti gli argomenti fanno riferimento alle colonne del database e quelle colonne del database sono NULL
, quindi non riceviamo l'errore.
Supponiamo di eseguire la seguente query:
SELECT CustomerId, CustomerCategoryId
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1;
Risultato:
CustomerId CustomerCategoryId ----------- ------------------ NULL NULL
Entrambe le colonne contengono NULL
valori.
Quindi, se passiamo entrambe le colonne a COALESCE()
, otteniamo un risultato di NULL
:
SELECT COALESCE( CustomerId, CustomerCategoryId )
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1;
Risultato:
NULL
Lo stesso vale se sostituiamo una delle colonne con NULL
costante:
SELECT COALESCE( CustomerId, null )
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1;
Risultato:
NULL
Quindi è solo quando tutti gli argomenti sono NULL
costante che otteniamo un errore.