Funções lógicas – IIF (Transact-SQL)
Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure
Retorna um de dois valores, dependendo de a expressão booliana ser avaliada como true ou false no SQL Server.
Convenções de sintaxe de Transact-SQL
Sintaxe
IIF( boolean_expression, true_value, false_value )
Argumentos
boolean_expression
Uma expressão Booliana válida.
Se esse argumento não for uma expressão booliana, um erro de sintaxe será gerado.
true_value
Valor a ser retornado se boolean_expression for avaliada como verdadeira.
false_value
Valor a ser retornado se boolean_expression for avaliada como falsa.
Tipos de retorno
Retorna o tipo de dados com a precedência mais alta dos tipos em true_value e false_value. Para obter mais informações, confira Precedência de tipo de dados (Transact-SQL).
Comentários
IIF é uma forma abreviada de gravar uma expressão CASE. Avalia a expressão Booliana passada pelo primeiro argumento e retorna qualquer um dos outros dois argumentos com base no resultado da avaliação. Ou seja, o true_value será retornado se a expressão booliana for verdadeira e o false_value será retornado se a expressão booliana for falsa ou desconhecida. true_value e false_value podem ser de qualquer tipo. As mesmas regras que se aplicam à expressão CASE para expressões boolianas, manipulação de nulos e tipos de retorno também se aplicam a IIF. Para obter mais informações, confira CASE (Transact-SQL).
O fato de IIF ser convertido em CASE também tem um impacto sobre outros aspectos do comportamento dessa função. Como as expressões CASE podem ser aninhadas apenas até o nível de 10, as instruções IIF também podem ser aninhadas apenas até o nível máximo de 10. Além disso, IIF é remota para outros servidores como uma expressão CASE semanticamente equivalente, com todos os comportamentos de uma expressão CASE remota.
O IIF não tem suporte em pools de SQL dedicados no Azure Synapse Analytics.
Exemplos
a. Exemplo de IIF simples
DECLARE @a INT = 45, @b INT = 40;
SELECT [Result] = IIF( @a > @b, 'TRUE', 'FALSE' );
Veja a seguir o conjunto de resultados.
Result
--------
TRUE
B. IIF com constantes NULL
SELECT [Result] = IIF( 45 > 30, NULL, NULL );
O resultado dessa instrução é um erro.
C. IIF com parâmetros NULL
DECLARE @P INT = NULL, @S INT = NULL;
SELECT [Result] = IIF( 45 > 30, @P, @S );
Veja a seguir o conjunto de resultados.
Result
--------
NULL