sql >> Base de Datos >  >> RDS >> Sqlserver

SQL Server IF vs IIF ():¿Cuál es la diferencia?

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).