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

SQL Server IF vs IIF() :quelle est la différence ?

Les étudiants qui apprennent un nouveau langage de programmation commenceront souvent leur première leçon avec un IF instruction, où leur instruction renverra une valeur uniquement si l'expression est vraie.

Ils peuvent ensuite évoluer vers un IF... ELSE , où ils peuvent déterminer une autre valeur à renvoyer si l'expression est fausse. Par conséquent, renvoyez une valeur si l'expression est vraie et une autre valeur si elle est fausse.

SQL Server inclut certainement le IF... ELSE déclaration dans sa boîte à outils T-SQL.

SQL Server inclut également le IIF() fonction, qui fait une chose similaire, mais avec une syntaxe plus concise.

Mais il y a quelques différences subtiles.

Les différences

Le tableau suivant présente les principales différences entre le IF déclaration et le IIF() fonction.

IF IIF()
Type Instruction de contrôle de flux. Fonction logique.
Comment le résultat est-il déterminé ? Vous spécifiez une instruction SQL ou un bloc d'instructions à exécuter. Vous spécifiez la valeur réelle à renvoyer.
Imbrication ? La limite du nombre de niveaux imbriqués dépend de la mémoire disponible. Ne peut être imbriqué que jusqu'au niveau maximum de 10.
Et si l'expression renvoie false ? Le ELSE mot-clé est facultatif (c'est-à-dire que vous pouvez choisir de répondre ou non aux faux résultats). Nécessite à la fois une valeur vraie et une valeur fausse (c'est-à-dire que vous devez tenir compte des faux résultats).

Le IIF() la fonction est en fait un raccourci pour écrire un CASE expression. Il partage donc les mêmes limitations que le CASE expression, qui sont différents du IF déclaration.

L'instruction IF

Voici un IF déclaration.

IF 1 < 2 SELECT 'True';

Résultat :

True

Dans ce cas, l'expression à évaluer est 1 < 2 . Il est vrai que 1 est inférieur à 2 donc le SELECT instruction a été exécutée et True a été renvoyé.

Cependant, si l'expression est fausse, rien ne se passera.

IF 1 > 2 SELECT 'True';

Résultat :

Commands completed successfully.

Tout ce que SQL Server m'a dit, c'est que la commande s'est terminée avec succès. Rien d'autre n'a été renvoyé, car rien d'autre n'a été spécifié.

L'instruction SI… SINON

Dans ce cas, nous pouvons ajouter l'optionnel ELSE au IF déclaration, de sorte qu'il devient un IF... ELSE déclaration.

IF 1 > 2
       SELECT 'True';
ELSE 
       SELECT 'False';

Résultat :

False

Maintenant, nous obtenons également un résultat lorsque l'expression est fausse.

La fonction IIF()

Le IIF() La fonction nous permet d'écrire la même logique en utilisant une syntaxe plus concise.

Nous pourrions donc réécrire l'exemple précédent comme suit :

SELECT IIF( 1 > 2, 'True', 'False' );

Résultat :

False

Le IIF() La fonction est fondamentalement une manière plus concise de faire le IF... ELSE déclaration.

En fait, ce n'est que partiellement vrai. Comme mentionné, le IIF() la fonction est basée sur le CASE expression, et a donc les mêmes limitations que le CASE expression (par exemple, ne pouvoir s'imbriquer qu'à un niveau maximum de 10).

Par conséquent, la déclaration précédente est l'équivalent de la suivante.

SELECT 
  CASE WHEN 1 > 2 THEN 'True'
    ELSE 'False'
  END;

Résultat :

False

Notez que IIF() nécessite deux arguments, et par conséquent, vous devez spécifier une valeur à renvoyer si l'expression est fausse (même si vous spécifiez NULL ou une chaîne vide).