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.