Gli studenti che stanno imparando un nuovo linguaggio di programmazione spesso iniziano la loro prima lezione con un IF
istruzione, dove la loro istruzione restituirà un valore solo se l'espressione è vera.
Potrebbero quindi passare a un IF... ELSE
istruzione, in cui possono determinare un altro valore da restituire se l'espressione è falsa. Quindi, quindi, restituisci un valore se l'espressione è vera e un altro valore se è falsa.
SQL Server include certamente IF... ELSE
istruzione nella sua casella degli strumenti T-SQL.
SQL Server include anche IIF()
funzione, che fa una cosa simile, ma con una sintassi più concisa.
Ma ci sono alcune sottili differenze.
Le differenze
La tabella seguente delinea le principali differenze tra IF
e l'istruzione IIF()
funzione.
IF | IIF() | |
---|---|---|
Tipo | Dichiarazione di controllo del flusso. | Funzione logica. |
Come viene determinato il risultato? | Specifica un'istruzione SQL o un blocco di istruzioni da eseguire. | Specifica il valore effettivo da restituire. |
Nidificazione? | Il limite al numero di livelli nidificati dipende dalla memoria disponibile. | Può essere nidificato solo fino al livello massimo di 10. |
Cosa succede se l'espressione restituisce false? | Il ELSE la parola chiave è facoltativa (cioè puoi scegliere se soddisfare o meno risultati falsi). | Richiede sia un valore vero che un valore falso (ovvero devi provvedere a risultati falsi). |
Il IIF()
function è in realtà un modo abbreviato per scrivere un CASE
espressione. Condivide quindi le stesse limitazioni del CASE
espressione, che sono diversi da IF
dichiarazione.
La dichiarazione IF
Ecco un IF
dichiarazione.
IF 1 < 2 SELECT 'True';
Risultato:
True
In questo caso, l'espressione da valutare è 1 < 2
. È vero che 1 è minore di 2 quindi SELECT
l'istruzione è stata eseguita e True
è stato restituito.
Tuttavia, se l'espressione è falsa, non accadrà nulla.
IF 1 > 2 SELECT 'True';
Risultato:
Commands completed successfully.
Tutto ciò che SQL Server mi ha detto è che il comando è stato completato correttamente. Nient'altro è stato restituito, perché nient'altro è stato specificato.
La dichiarazione IF... ELSE
In questo caso, possiamo aggiungere l'opzione ELSE
al IF
istruzione, in modo che diventi un IF... ELSE
dichiarazione.
IF 1 > 2
SELECT 'True';
ELSE
SELECT 'False';
Risultato:
False
Ora otteniamo anche un risultato quando l'espressione è falsa.
La funzione IIF()
Il IIF()
La funzione ci permette di scrivere la stessa logica usando una sintassi più concisa.
Potremmo quindi riscrivere l'esempio precedente come segue:
SELECT IIF( 1 > 2, 'True', 'False' );
Risultato:
False
Il IIF()
La funzione è fondamentalmente un modo più conciso di eseguire IF... ELSE
dichiarazione.
In realtà, questo è vero solo in parte. Come accennato, il IIF()
la funzione è basata su CASE
espressione, e quindi ha le stesse limitazioni di CASE
espressione (come la possibilità di annidare solo fino a un livello massimo di 10).
Pertanto, l'affermazione precedente è l'equivalente della seguente.
SELECT
CASE WHEN 1 > 2 THEN 'True'
ELSE 'False'
END;
Risultato:
False
Nota che IIF()
richiede due argomenti e, pertanto, è necessario specificare un valore da restituire se l'espressione risulta false (anche se si specifica NULL
o una stringa vuota).