Los estudiantes que aprenden un nuevo lenguaje de programación a menudo comienzan su primera lección con un IF
declaración, donde su declaración devolverá un valor solo si la expresión es verdadera.
Luego podrían progresar a un IF... ELSE
declaración, donde pueden determinar otro valor para devolver si la expresión es falsa. Por lo tanto, devuelve un valor si la expresión es verdadera y otro valor si es falsa.
SQL Server ciertamente incluye el IF... ELSE
instrucción en su caja de herramientas T-SQL.
SQL Server también incluye el IIF()
función, que hace algo similar, pero con una sintaxis más concisa.
Pero hay algunas diferencias sutiles.
Las diferencias
La siguiente tabla describe las principales diferencias entre el IF
declaración y el IIF()
función.
IF | IIF() | |
---|---|---|
Tipo | Declaración de control de flujo. | Función lógica. |
¿Cómo se determina el resultado? | Usted especifica una sentencia SQL o un bloque de sentencias para ejecutar. | Usted especifica el valor real a devolver. |
¿Anidamiento? | El límite del número de niveles anidados depende de la memoria disponible. | Se puede anidar solo hasta el nivel máximo de 10. |
¿Qué sucede si la expresión devuelve falso? | El ELSE la palabra clave es opcional (es decir, puede elegir si desea o no atender los resultados falsos). | Requiere tanto un valor verdadero como uno falso (es decir, debe tener en cuenta los resultados falsos). |
El IIF()
La función es en realidad una forma abreviada de escribir un CASE
expresión. Por lo tanto, comparte las mismas limitaciones que el CASE
expresión, que son diferentes al IF
declaración.
La Declaración SI
Aquí hay un IF
declaración.
IF 1 < 2 SELECT 'True';
Resultado:
True
En este caso, la expresión a evaluar es 1 < 2
. Es cierto que 1 es menor que 2 por lo que SELECT
se ejecutó la declaración y True
fue devuelto.
Sin embargo, si la expresión es falsa, no pasará nada.
IF 1 > 2 SELECT 'True';
Resultado:
Commands completed successfully.
Todo lo que SQL Server me dijo es que el comando se completó con éxito. No se devolvió nada más, porque no se especificó nada más.
La declaración IF... ELSE
En este caso, podemos agregar el ELSE
opcional al IF
declaración, para que se convierta en un IF... ELSE
declaración.
IF 1 > 2
SELECT 'True';
ELSE
SELECT 'False';
Resultado:
False
Ahora también obtenemos un resultado cuando la expresión es falsa.
La función IIF()
El IIF()
La función nos permite escribir la misma lógica utilizando una sintaxis más concisa.
Por lo tanto, podríamos reescribir el ejemplo anterior de la siguiente manera:
SELECT IIF( 1 > 2, 'True', 'False' );
Resultado:
False
El IIF()
es básicamente una forma más concisa de hacer IF... ELSE
declaración.
En realidad, eso es solo parcialmente cierto. Como se mencionó, el IIF()
la función se basa en el CASE
expresión, y por lo tanto tiene las mismas limitaciones del CASE
expresión (como solo poder anidar hasta un nivel máximo de 10).
Por lo tanto, la afirmación anterior es equivalente a la siguiente.
SELECT
CASE WHEN 1 > 2 THEN 'True'
ELSE 'False'
END;
Resultado:
False
Tenga en cuenta que IIF()
requiere dos argumentos y, por lo tanto, debe especificar un valor para devolver si la expresión da como resultado falso (incluso si especifica NULL
o una cadena vacía).