Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Correção “Pelo menos um dos argumentos para COALESCE deve ser uma expressão que não seja a constante NULL” no SQL Server


No SQL Server, se você estiver recebendo a mensagem de erro 4127 que diz “Pelo menos um dos argumentos para COALESCE deve ser uma expressão que não seja a constante NULL”, provavelmente é porque todos os seus argumentos para o COALESCE() expressão são os NULL constante.

Para corrigir esse problema, certifique-se de que pelo menos um argumento não seja NULL constante.

Exemplo de erro


Aqui está um exemplo de código que produz esse erro:
SELECT COALESCE( null, null );

Obtemos isso:
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.

Neste caso, todos os argumentos eram NULL constante e, portanto, um erro foi retornado.

Solução


A solução é fácil. Tudo o que precisamos fazer é garantir que pelo menos um argumento não seja NULL constante:
SELECT COALESCE(null, 'Cat', 'Dog');

Resultado:
Cat

Neste caso, Cat foi o primeiro não-NULL argumento, e assim COALESCE() retornou esse valor.

Como visto aqui, não há problema em incluir o NULL constante como um argumento, desde que também haja pelo menos um outro argumento que não o NULL constante.

NULL Expressões e colunas de banco de dados


Observe que o NULL constante não é o mesmo que uma expressão que resulta em NULL . E não é o mesmo que uma coluna de banco de dados que contém NULL .

Por exemplo, se todos os argumentos fizerem referência a colunas de banco de dados e essas colunas de banco de dados forem NULL , então não obtemos o erro.

Suponha que executemos a seguinte consulta:
SELECT CustomerId, CustomerCategoryId
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1;

Resultado:
CustomerId  CustomerCategoryId
----------- ------------------
NULL        NULL

Ambas as colunas contêm NULL valores.

Então, se passarmos ambas as colunas para COALESCE() , obtemos um resultado de NULL :
SELECT COALESCE( CustomerId, CustomerCategoryId )
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1;

Resultado:
NULL

O mesmo acontece se substituirmos uma das colunas pelo NULL constante:
SELECT COALESCE( CustomerId, null )
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1;

Resultado:
NULL

Portanto, é somente quando todos argumentos são os NULL constante que obtemos um erro.