En SQL Server, si recibe el mensaje de error 4127 que dice "Al menos uno de los argumentos para COALESCE debe ser una expresión que no sea la constante NULL", probablemente se deba a que todos sus argumentos para COALESCE()
expresión son los NULL
constante.
Para solucionar este problema, asegúrese de que al menos un argumento no sea NULL
constante.
Ejemplo de error
Aquí hay un ejemplo de código que produce este error:
SELECT COALESCE( null, null );
Obtenemos esto:
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.
En este caso, todos los argumentos eran NULL
constante, por lo que se devolvió un error.
Solución
La solución es fácil. Todo lo que tenemos que hacer es asegurarnos de que al menos un argumento no sea NULL
constante:
SELECT COALESCE(null, 'Cat', 'Dog');
Resultado:
Cat
En este caso, Cat
fue el primer no NULL
argumento, y así COALESCE()
devolvió ese valor.
Como se ve aquí, está bien incluir el NULL
constante como argumento, siempre que haya al menos otro argumento que no el NULL
constante.
NULL
Expresiones y columnas de base de datos
Tenga en cuenta que NULL
constante no es lo mismo que una expresión que da como resultado NULL
. Y no es lo mismo que una columna de base de datos que contiene NULL
.
Por ejemplo, si todos los argumentos hacen referencia a las columnas de la base de datos y esas columnas de la base de datos son NULL
, entonces no recibimos el error.
Supongamos que ejecutamos la siguiente consulta:
SELECT CustomerId, CustomerCategoryId
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1;
Resultado:
CustomerId CustomerCategoryId ----------- ------------------ NULL NULL
Ambas columnas contienen NULL
valores.
Entonces, si pasamos ambas columnas a COALESCE()
, obtenemos un resultado de NULL
:
SELECT COALESCE( CustomerId, CustomerCategoryId )
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1;
Resultado:
NULL
Lo mismo es cierto si reemplazamos una de las columnas con NULL
constante:
SELECT COALESCE( CustomerId, null )
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1;
Resultado:
NULL
Entonces es solo cuando todos los argumentos son NULL
constante que obtenemos un error.