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

Solucione el mensaje de error 4151 "El tipo del primer argumento para NULLIF no puede ser la constante NULL porque el tipo del primer argumento debe conocerse" en SQL Server

Si recibe el mensaje de error 4151 "El tipo del primer argumento para NULLIF no puede ser la constante NULL porque el tipo del primer argumento debe conocerse ” en SQL Server, es porque está pasando un valor nulo como primer argumento a NULLIF() función.

Para corregir este error, asegúrese de no pasar la constante nula como primer argumento de la función. O si lo hace, conviértalo a un tipo de datos específico.

Ejemplo del error

Aquí hay un ejemplo de código que produce el error:

SELECT NULLIF(null, 7);

Resultado:

Msg 4151, Level 16, State 1, Line 1
The type of the first argument to NULLIF cannot be the NULL constant because the type of the first argument has to be known.

En SQL Server, NULLIF() El valor de retorno de la función utiliza el tipo de datos de la primera expresión. Esto significa que el primer valor no debe ser la constante nula, dado que la constante nula no tiene un tipo de datos conocido.

Este error debería ser bastante raro. En la mayoría de los casos, pasará un nombre de columna como primer argumento y, en SQL Server, las columnas tienen un tipo de datos definido. En tales casos, se aceptará un valor nulo, debido a que SQL Server conoce el tipo de datos de la columna.

Lo mismo podría decirse de las variables. Si pasa una variable, habría tenido que declarar su tipo y, por lo tanto, no obtendría el error.

En cualquier caso, si recibe este error, puede probar la siguiente solución.

Solución

Si obtiene este error, puede convertir la constante nula a un tipo de datos específico:

SELECT NULLIF(CAST(null AS int), 7);

Resultado:

NULL

En este caso NULL se devuelve, porque los dos argumentos son diferentes y NULL es el primer argumento.

Si el primer argumento es una columna, no tendrá que preocuparse por convertir su tipo, porque la columna ya tiene un tipo de datos.

Supongamos que tenemos un ProductPrice columna:

SELECT ProductPrice
FROM Products;

Resultado:

+----------------+
| ProductPrice   |
|----------------|
| 25.99          |
| 14.75          |
| 11.99          |
| 0.00           |
| 0.00           |
| NULL           |
| 9.99           |
| 25.99          |
+----------------+

La columna contiene un valor nulo.

Sin embargo, podemos pasar esa columna a NULLIF() sin causar el error 4151:

SELECT NULLIF(ProductPrice, 0) AS Result
FROM Products;

Resultado:

+----------+
| Result   |
|----------|
| 25.99    |
| 14.75    |
| 11.99    |
| NULL     |
| NULL     |
| NULL     |
| 9.99     |
| 25.99    |
+----------+

No obtuvimos ningún error porque SQL Server ya conoce el tipo de datos de la columna.