Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Correzione "Almeno uno degli argomenti di COALESCE deve essere un'espressione che non è la costante NULL" in SQL Server

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.