Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SQL Server IF vs IIF():Qual é a diferença?


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