Esta es una pregunta muy común. Por lo general por las personas que llegan a usar SQL Server con conocimientos previos de Microsoft Access. O tal vez si han usado SQL Server como backend para sus proyectos de Access, o también si han intentado migrar bases de datos de Access a SQL Server. La respuesta, sin embargo, no suele ser apreciada a primera vista:
Entonces ¿Hay alguna forma de usar IF o IIF en SQL Server?
NO, No hay sentencias IIF e IF en SQL Server para utilizar en una consulta!
Es frustrante, nos guste o no, este tipo de consultas deben que ser reescritos utilizando la expresión CASE. Veamos un ejemplo sencillo:
SELECT idpersona, paterno, materno, nombres, IIF(Persona.sexo = 'F', 'Mujer','Hombre') AS Genero FROM Persona WHERE provincia = 'Puno';
La consulta va a ejecutarse sin problemas en MS Access, para visualizar el genero de un listado de personas, pero al ejecutar la misma consulta en SQL Server obtendremos un mensaje de error:
Mens. 102, Nivel 15, Estado 1, Línea 1 Incorrect syntax near '='.
Así que, como se mencionó anteriormente, la consulta tiene que volver a escribirse utilizando la expresión CASE. Eso podría ser algo como esto:
SELECT idpersona, paterno, materno, nombres, CASE WHEN Sexo = 'F' THEN 'Mujer' ELSE 'Hombre' END AS Genero FROM Persona WHERE provincia = 'Puno';
La sentencia IIF fue reemplazada con la expresión CASE (líneas 3 a la 7), ésta si es una consulta que puede entender el motor SQL Server.
Para quienes hemos aprovechado al máximo la sentencias IF o IIF podría resultar un poco incomodo tener que cambiar el modo en que escribimos las consultas. Sin embargo CASE es uno de los comandos más poderosos en el lenguaje Transact-SQL. En contraste con sentencias IF IIF, por su puesto!… por que principalmente con IF, IIF sólo puede evaluarse una expresión lógica a la vez, esta limitación no existe para el la sentencia CASE. Por que no hacemos una prueba?, por ejemplo, con la expresión IIF sería un poco engorroso escribir una expresión equivalente a:
SELECT idpersona, paterno, materno, nombres, CASE provincia WHEN 'Trujillo' THEN 'Norte' WHEN 'Piura' THEN 'Norte' WHEN 'Arequipa' THEN 'Sur' WHEN 'Puno' THEN 'Sun' ELSE 'Sin clasificar' AS Region FROM Persona
Cuando ustedes se familiaricen con CASE, verán lo útil que es.
Articulo interesante para todos los que tenemos versiones de SQL SERVER antiguas pero funcionando perfectamente a pesar de los años.
Saludos.
Excelente muchas gracias me saco de la duda
Excelente, gracias
Si lo hay, IIF ( boolean_expression, true_value, false_value )
https://docs.microsoft.com/en-us/sql/t-sql/functions/logical-functions-iif-transact-sql?view=sql-server-2017
Caramba… tienes razón… éste artículo fue escrito hace un tiempo en el que esa función no existía
Gracias Loko, excelente!!!