Articles

Como usar IF…THEN Logic in SQL Server

Posted on

SQL Server tem uma capacidade única de lhe permitir executar lógica programática em tempo real sobre os valores dentro da sua consulta. Com base nessas avaliações lógicas, pode gerar vários valores como parte do conjunto de dados devolvidos.

Usando a Declaração CASE

Isto é mais facilmente realizado em todas as versões do SQL Server usando a instrução CASE, que actua como uma expressão lógica IF...THEN...ELSE e retorna vários valores dependendo do resultado.

Neste exemplo abaixo, queremos devolver uma coluna adicional locale que especifica se o nosso livro tem lugar 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 aspecto especial CASE desta afirmação, vamos remover temporariamente o CASE para notar que esta é uma declaração extremamente simples SELECT na superfície:

SELECT books.*FROM books

Por isso, vamos examinar como a secção CASE está estruturada e qual o comportamento lógico que estamos a executar.

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 a declaração CASE e depois especificamos em que condições (WHEN) a nossa declaração CASE deve avaliar um resultado. Neste exemplo, estamos a examinar o books.title e books.primary_author; se qualquer das duas se enquadrar no nosso tema Tolkien-esque, THEN devolvemos o valor ‘Middle-earth’. Se nenhum dos campos corresponder à nossa pesquisa, devolvemos o valor de ‘Terra’.

Para reorganizar a lógica como um código psuedo-code IF...THEN...ELSE declaração, estamos simplesmente a pedir SQL para avaliar:

IF title == 'The Hobbit' OR primary_author == 'Tolkien'THEN RETURN 'Middle-earth'ELSE RETURN 'Earth'END

Finalmente, é fundamental lembrar que uma declaração CASE deve ser sempre anexada no final com uma declaração correspondente END. No exemplo acima, estamos também a renomear o valor resultante que é devolvido a locale, embora isso seja certamente opcional.

Usando a função IIF

Se estiver a utilizar uma versão mais moderna de SQL, é útil saber que o SQL Server 2012 introduziu a muito útil função IIFIIF é um método abreviado para executar uma IF...ELSECASE declaração e retornar um de dois valores, dependendo da avaliação do resultado.

Reestruturar o nosso exemplo acima para usar IIF é bastante simples.

SELECT IIF( books.title = 'The Hobbit' OR books.primary_author = 'Tolkien', 'Middle-earth', 'Earth') AS locale, books.*FROM books

Com uma função IIF, substituímos em grande parte muito do açúcar sintáctico da declaração CASE por alguns simples comma-seperadores para diferenciar os nossos argumentos.

tudo dito, tanto CASE como IIF fazer o mesmo trabalho, mas se for dada a escolha, IIF será geralmente muito mais simples de usar.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *