IIF (Transact-SQL)
Retourne l'une des deux valeurs possibles, selon que l'expression booléenne renvoie true ou false.
Conventions de la syntaxe Transact-SQL
Syntaxe
IIF ( boolean_expression, true_value, false_value )
Arguments
boolean_expression
Expression booléenne valide.Si cet argument n'est pas une expression booléenne, une erreur de syntaxe est générée.
true_value
Valeur à retourner si boolean_expression renvoie true.false_value
Valeur à retourner si boolean_expression renvoie false.
Type des valeurs retournées
Retourne le type de données ayant la priorité la plus élevée parmi les types dans true_value et false_value. Pour plus d'informations, consultez Priorités des types de données (Transact-SQL).
Notes
IIF est un moyen rapide d'écrire une instruction CASE. Elle évalue l'expression booléenne passée comme premier argument, puis retourne l'un des deux autres arguments selon le résultat de l'évaluation. Autrement dit, true_value est retourné si l'expression booléenne est true et false_value est retourné si l'expression booléenne est false ou inconnue. true_value et false_value peuvent être de n'importe quel type. Les règles qui s'appliquent à l'instruction CASE pour les expressions booléennes, la gestion de la valeur NULL et les types de retour s'appliquent également à IIF. Pour plus d'informations, consultez CASE (Transact-SQL).
Le fait que IIF soit convertie en CASE a également un impact sur d'autres aspects du comportement de cette fonction. Étant donné que les instructions CASE peuvent être imbriquées seulement jusqu'à un niveau de 10, les instructions IIF peuvent également être imbriquées uniquement jusqu'à un niveau maximal de 10. En outre, IIF est exécutée à distance sur d'autres serveurs en tant qu'instruction sémantiquement équivalente de CASE, avec tous les comportements d'une instruction CASE exécutée à distance.
Exemples
A.Exemple IIF simple
DECLARE @a int = 45;
DECLARE @b int = 40;
SELECT IIF ( @a > @b, 'TRUE', 'FALSE' ) AS Result;
Voici l'ensemble des résultats.
Result
--------
TRUE
(1 row(s) affected)
B.IIF avec des constantes NULL
SELECT IIF ( 45 > 30, NULL, NULL ) AS Result;
Le résultat de cette instruction est une erreur.
C.IIF avec des paramètres NULL
DECLARE @P INT = NULL;
DECLARE @S INT = NULL;
SELECT IIF ( 45 > 30, @p, @s ) AS Result;
Voici l'ensemble des résultats.
Result
--------
NULL
(1 row(s) affected)