IF, IIF en SQL Server

Por:ivancp, enviado 03 sep 2011

Es posible utilizar IIF, If 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:

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:

Code: Seleccionar todo
  1. SELECT idpersona, paterno,

  2.         materno, nombres,

  3.         IIF(Persona.sexo = 'F', 'Mujer','Hombre') AS Genero

  4. FROM Persona

  5. 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:

Code: Seleccionar todo
  1. Mens. 102, Nivel 15, Estado 1, Línea 1

  2. 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:

Code: Seleccionar todo
  1. SELECT

  2.  idpersona, paterno, materno, nombres,

  3.  CASE

  4.     WHEN Sexo = 'F'

  5.      THEN 'Mujer'

  6.      ELSE 'Hombre'

  7.      END AS Genero

  8. FROM Persona

  9. 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:

Code: Seleccionar todo
  1. SELECT

  2.  idpersona, paterno, materno, nombres,

  3.  CASE provincia

  4.     WHEN 'Trujillo'

  5.         THEN 'Norte'

  6.     WHEN 'Piura'

  7.         THEN 'Norte'

  8.     WHEN 'Arequipa'

  9.         THEN 'Sur'

  10.     WHEN 'Puno'

  11.         THEN 'Sun'

  12.     ELSE 'Sin clasificar'

  13.   AS Region

  14. FROM Persona



Cuando ustedes se familiaricen con CASE, verán lo útil que es.

Otros Artículos en esta sección

¿Alguna duda? Sientete libre de hacer tus pruntas en nuestro:
foro de Bases de datos »