sql >> Base de Datos >  >> RDS >> Sqlserver

Arreglar "Al menos uno de los argumentos para COALESCE debe ser una expresión que no sea la constante NULL" en SQL Server

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.