Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL Server IF vs IIF():qual è la differenza?

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).