IIF (Transact-SQL)
Viene restituito uno di due valori a seconda che l'espressione booleana sia true o false in SQL Server 2012.
Convenzioni della sintassi Transact-SQL
Sintassi
IIF ( boolean_expression, true_value, false_value )
Argomenti
boolean_expression
Espressione booleana valida.Se questo argomento non è un'espressione booleana, viene generato un errore di sintassi.
true_value
Valore da restituire se boolean_expression è true.false_value
Valore da restituire se boolean_expression è false.
Tipi restituiti
Restituisce il tipo di dati con precedenza maggiore nei tipi true_value e false_value. Per ulteriori informazioni, vedere Precedenza dei tipi di dati (Transact-SQL).
Osservazioni
IIF è un modo abbreviato per scrivere un'espressione CASE. Valuta l'espressione booleana passata come primo argomento, quindi restituisce uno dei due argomenti in base al risultato della valutazione. Viene pertanto restituito true_value se l'espressione booleana è true, mentre viene restituito false_value se l'espressione booleana è false o sconosciuta. true_value e false_value possono essere di tipo qualsiasi. Le stesse regole applicate all'espressione CASE per espressioni booleane, gestione di valori Null e tipi restituiti vengono applicate anche a IIF. Per ulteriori informazioni, vedere CASE (Transact-SQL).
La conversione di IIF in CASE influisce inoltre su altri aspetti del comportamento di questa funzione. Poiché le espressioni CASE possono essere nidificate solo fino a livello 10, anche le istruzioni IIF possono essere nidificate fino al livello massimo 10. Inoltre l'istruzione IIF viene eseguita in modalità remota in altri server come un'espressione CASE equivalente dal punto di vista semantico, con tutti i comportamenti di un'espressione CASE eseguita in modalità remota.
Esempi
A.Esempio semplice di IIF
DECLARE @a int = 45, @b int = 40;
SELECT IIF ( @a > @b, 'TRUE', 'FALSE' ) AS Result;
Set di risultati:
Result
--------
TRUE
(1 row(s) affected)
B.IIF con costanti NULL
SELECT IIF ( 45 > 30, NULL, NULL ) AS Result;
Il risultato di questa istruzione è un errore.
C.IIF con parametri NULL
DECLARE @P INT = NULL, @S INT = NULL;
SELECT IIF ( 45 > 30, @p, @s ) AS Result;
Set di risultati:
Result
--------
NULL
(1 row(s) affected)