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.