Os alunos que estão aprendendo uma nova linguagem de programação geralmente começam sua primeira aula com um
IF
declaração, onde sua declaração retornará um valor somente se a expressão for verdadeira. Eles podem então progredir para um
IF... ELSE
declaração, onde eles podem determinar outro valor para retornar se a expressão for falsa. Portanto, retorne um valor se a expressão for verdadeira e outro valor se for falsa. O SQL Server certamente inclui o
IF... ELSE
instrução em sua caixa de ferramentas T-SQL. O SQL Server também inclui o
IIF()
função, que faz uma coisa semelhante, mas com uma sintaxe mais concisa. Mas há algumas diferenças sutis.
As diferenças
A tabela a seguir descreve as principais diferenças entre o
IF
instrução e o IIF()
função. IF | IIF() | |
---|---|---|
Tipo | Instrução de controle de fluxo. | Função lógica. |
Como o resultado é determinado? | Você especifica uma instrução SQL ou um bloco de instrução para executar. | Você especifica o valor real a ser retornado. |
Aninhamento? | O limite para o número de níveis aninhados depende da memória disponível. | Só pode ser aninhado até o nível máximo de 10. |
E se a expressão retornar false? | O ELSE palavra-chave é opcional (ou seja, você pode escolher se deseja ou não atender a resultados falsos). | Requer um valor verdadeiro e um valor falso (ou seja, você deve atender a resultados falsos). |
O
IIF()
função é na verdade uma forma abreviada de escrever um CASE
expressão. Portanto, ele compartilha as mesmas limitações que o CASE
expressão, que são diferentes do IF
demonstração. A Declaração IF
Aqui está um
IF
demonstração. IF 1 < 2 SELECT 'True';
Resultado:
True
Nesse caso, a expressão a ser avaliada é
1 < 2
. É verdade que 1 é menor que 2, então o SELECT
declaração foi executada e True
foi devolvido. No entanto, se a expressão for falsa, nada acontecerá.
IF 1 > 2 SELECT 'True';
Resultado:
Commands completed successfully.
Tudo o que o SQL Server me disse é que o comando foi concluído com êxito. Nada mais foi retornado, porque nada mais foi especificado.
A declaração SE... ELSE
Neste caso, podemos adicionar o opcional
ELSE
para o IF
declaração, para que se torne um IF... ELSE
demonstração. IF 1 > 2
SELECT 'True';
ELSE
SELECT 'False';
Resultado:
False
Agora também obtemos um resultado quando a expressão é falsa.
A função IIF()
O
IIF()
A função nos permite escrever a mesma lógica usando uma sintaxe mais concisa. Podemos, portanto, reescrever o exemplo anterior para o seguinte:
SELECT IIF( 1 > 2, 'True', 'False' );
Resultado:
False
O
IIF()
função é basicamente uma maneira mais concisa de fazer o IF... ELSE
demonstração. Na verdade, isso é apenas parcialmente verdade. Como mencionado, o
IIF()
função é baseada no CASE
expressão e, portanto, tem as mesmas limitações do CASE
expressão (como apenas poder aninhar até um nível máximo de 10). Portanto, a afirmação anterior é equivalente à seguinte.
SELECT
CASE WHEN 1 > 2 THEN 'True'
ELSE 'False'
END;
Resultado:
False
Observe que
IIF()
requer dois argumentos e, portanto, você deve especificar um valor a ser retornado se a expressão resultar em false (mesmo se você especificar NULL
ou uma string vazia).