IF, IIF en SQL Server

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.

 

6 Respuestas a “IF, IIF en SQL Server”
  1. Rodrigo Torres Quiroga 10 Oct 2020
    Reply

    Articulo interesante para todos los que tenemos versiones de SQL SERVER antiguas pero funcionando perfectamente a pesar de los años.

    Saludos.

Dejar una Respuesta