Funciones lógicas - IIF (Transact-SQL)
Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance
Devuelve uno de dos valores, dependiendo de si la expresión booleana se evalúa como true o como false en SQL Server.
Convenciones de sintaxis de Transact-SQL
Sintaxis
IIF( boolean_expression, true_value, false_value )
Argumentos
boolean_expression
Una expresión booleana válida.
Si este argumento no es una expresión booleana, se produce un error de sintaxis.
true_value
Valor que se devuelve si boolean_expression se evalúa como true.
false_value
Valor que se devuelve si boolean_expression se evalúa como false.
Tipos de valor devuelto
Devuelve el tipo de datos que tiene la prioridad más alta de los tipos de true_value y false_value. Para obtener más información, vea Prioridad de tipo de datos (Transact-SQL).
Comentarios
IIF es una manera abreviada para escribir una expresión CASE. Evalúa la expresión booleana pasada como primer argumento y devuelve cualquiera de los otros dos argumentos según el resultado de la evaluación. Es decir, se devuelve true_value si la expresión booleana es true y se devuelve false_value si la expresión booleana es false o desconocida. true_value y false_value pueden ser de cualquier tipo. Las mismas reglas que se aplican a la expresión CASE en las expresiones booleanas, el control de valores NULL y los tipos de valores devueltos también se aplican a IIF. Para obtener más información, consulte CASE (Transact-SQL).
El hecho de que IIF se traduzca a CASE también afecta a otros aspectos del comportamiento de esta función. Dado que las expresiones CASE solo se pueden anidar hasta 10 niveles, las instrucciones IIF también se pueden anidar únicamente hasta un máximo de 10. Además, IIF se envía de forma remota a otros servidores como una expresión CASE semánticamente equivalente, con todos los comportamientos de una expresión CASE remota.
IIF no se admite en grupos de SQL dedicados en Azure Synapse Analytics.
Ejemplos
A. Ejemplo sencillo de IIF
DECLARE @a INT = 45, @b INT = 40;
SELECT [Result] = IIF( @a > @b, 'TRUE', 'FALSE' );
Este es el conjunto de resultados.
Result
--------
TRUE
B. IIF con constantes NULL
SELECT [Result] = IIF( 45 > 30, NULL, NULL );
El resultado de esta instrucción es un error.
C. IIF con parámetros NULL
DECLARE @P INT = NULL, @S INT = NULL;
SELECT [Result] = IIF( 45 > 30, @P, @S );
Este es el conjunto de resultados.
Result
--------
NULL