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

Como usar a lógica IF...THEN no SQL Server


O SQL Server tem um recurso exclusivo de permitir que você execute lógica programática em tempo real nos valores de sua consulta. Com base nessas avaliações lógicas, você pode gerar vários valores como parte do conjunto de dados retornado.

Usando a declaração CASE


Isso é feito mais facilmente em todas as versões do SQL Server usando o CASE instrução, que atua como um IF...THEN...ELSE lógico expressão e retorna vários valores dependendo do resultado.

Neste exemplo abaixo, queremos retornar um locale adicional coluna que especifica se nosso livro se passa na Terra-média ou na Terra antiga regular.
SELECT
  CASE
    WHEN
      books.title = 'The Hobbit'
        THEN
          'Middle-earth'
    WHEN
      books.primary_author = 'Tolkien'
        THEN
          'Middle-earth'
    ELSE
      'Earth'
  END AS locale,
  books.*
FROM
  books

Antes de examinarmos o CASE especial aspecto desta declaração, vamos remover temporariamente o CASE notar que este é um SELECT extremamente simples declaração na superfície:
SELECT
  books.*
FROM
  books

Portanto, vamos examinar como o CASE seção está estruturada e qual o comportamento lógico que estamos realizando.
CASE
  WHEN
    books.title = 'The Hobbit'
      THEN
        'Middle-earth'
  WHEN
    books.primary_author = 'Tolkien'
      THEN
        'Middle-earth'
  ELSE
    'Earth'
END AS locale

Para começar, inicializamos o CASE então especifique sob quais condições (WHEN ) nosso CASE declaração deve avaliar um resultado. Neste exemplo, estamos examinando o books.title e books.primary_author; se se encaixar no nosso tema Tolkien-esque, THEN retornamos o valor 'Middle-earth'. Se nenhum dos campos corresponder à nossa pesquisa, retornaremos o valor de 'Earth'.

Para reorganizar a lógica como um pseudocódigo IF...THEN...ELSE instrução, estamos simplesmente pedindo ao SQL para avaliar:
IF
  title == 'The Hobbit' OR
  primary_author == 'Tolkien'
THEN
  RETURN 'Middle-earth'
ELSE
  RETURN 'Earth'
END

Finalmente, é fundamental lembrar que um CASE A instrução deve sempre ser anexada no final com um END correspondente demonstração. No exemplo acima, também estamos renomeando o valor resultante que é retornado para locale , embora isso seja certamente opcional.

Usando a função IIF


Se você estiver usando uma versão mais moderna do SQL, é útil saber que o SQL Server 2012 introduziu o muito útil IIF função. IIF é um método abreviado para executar um IF...ELSE /CASE e retornando um de dois valores, dependendo da avaliação do resultado.

Reestruturando nosso exemplo acima para usar IIF é bem simples.
SELECT
  IIF(
    books.title = 'The Hobbit' OR books.primary_author = 'Tolkien',
    'Middle-earth',
    'Earth')
  AS locale,
  books.*
FROM
  books

Com um IIF função, nós substituímos grande parte do açúcar sintático do CASE declaração com alguns separadores de vírgulas simples para diferenciar nossos argumentos.

Tudo dito, ambos CASE e IIF faça o mesmo trabalho, mas se tiver a opção, IIF geralmente será muito mais simples de usar.