Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment utiliser la logique IF...THEN dans SQL Server

SQL Server a la capacité unique de vous permettre d'exécuter une logique de programmation en temps réel sur les valeurs de votre requête. Sur la base de ces évaluations logiques, vous pouvez générer diverses valeurs dans le cadre de l'ensemble de données renvoyé.

Utilisation de l'instruction CASE

Ceci est plus facilement accompli dans toutes les versions de SQL Server en utilisant le CASE instruction, qui agit comme un IF...THEN...ELSE logique expression et renvoie diverses valeurs en fonction du résultat.

Dans cet exemple ci-dessous, nous voulons retourner un locale supplémentaire colonne qui précise si notre livre se déroule en Terre du Milieu ou sur l'ancienne Terre ordinaire.

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

Avant d'examiner le CASE spécial aspect de cette déclaration, supprimons temporairement le CASE pour remarquer qu'il s'agit d'un SELECT extrêmement simple déclaration en surface :

SELECT
  books.*
FROM
  books

Par conséquent, examinons comment le CASE section est structurée et quel comportement logique nous effectuons.

CASE
  WHEN
    books.title = 'The Hobbit'
      THEN
        'Middle-earth'
  WHEN
    books.primary_author = 'Tolkien'
      THEN
        'Middle-earth'
  ELSE
    'Earth'
END AS locale

Pour commencer, nous initialisons le CASE instruction puis précisez dans quelles conditions (WHEN ) notre CASE l'instruction doit évaluer un résultat. Dans cet exemple, nous examinons le books.title et books.primary_author; si l'un ou l'autre correspond à notre thème Tolkien-esque, THEN nous renvoyons la valeur "Terre du Milieu". Si aucun des champs ne correspond à notre recherche, nous renvoyons à la place la valeur de "Terre".

Pour réorganiser la logique en pseudo-code IF...THEN...ELSE instruction, nous demandons simplement à SQL d'évaluer :

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

Enfin, il est essentiel de se rappeler qu'un CASE l'instruction doit toujours être ajoutée à la fin avec un END correspondant déclaration. Dans l'exemple ci-dessus, nous renommons également la valeur résultante qui est renvoyée en locale , bien que ce soit certainement facultatif.

Utilisation de la fonction IIF

Si vous utilisez une version plus moderne de SQL, il est utile de savoir que SQL Server 2012 a introduit le très pratique IIF une fonction. IIF est une méthode abrégée pour effectuer un IF...ELSE /CASE instruction et renvoyant l'une des deux valeurs, en fonction de l'évaluation du résultat.

Restructuration de notre exemple ci-dessus pour utiliser IIF est assez simple.

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

Avec un IIF fonction, nous remplaçons en grande partie le sucre syntaxique du CASE déclaration avec quelques virgules simples pour différencier nos arguments.

Tout compte fait, les deux CASE et IIF faire le même travail, mais si vous avez le choix, IIF sera généralement beaucoup plus simple à utiliser.