Le dichiarazioni IF..ELSE in MS SQL Server

In generale, l’IF..ELSE è una dichiarazione di decisione in vari linguaggi di programmazione. L’istruzione IF è usata per eseguire un blocco di codice se una condizione è soddisfatta. Se una condizione non è soddisfatta (FALSE) allora opzionalmente può essere usata l’istruzione ELSE.

Nel caso di SQL Server, l’istruzione IF è usata per eseguire istruzioni SQL se una condizione è TRUE.

Per esempio:

1
2
3
4
5
6
7

IF @table_name = ’employees’
SELECT * FROM sto_employees;
ELSE
SELECT * FROM sto_products;

Nel codice sopra, @table_name è una variabile. Se un valore assegnato a questa variabile è “employees”, l’istruzione IF recupererà i dati dalla tabella sto_employees. Se il valore della variabile è diverso da “employee” la condizione IF diventa FALSE e la parte ELSE verrà eseguita.

Vi mostrerò questo semplice utilizzo negli esempi seguenti con l’output. Nell’ultima sezione, spiegherò anche come soddisfare lo scopo “ELSE IF” che non è disponibile in SQL Server.

Un semplice esempio di utilizzo dell’istruzione IF senza ELSE

Partiamo con un semplice esempio di utilizzo dell’istruzione IF SQL. Valuteremo una variabile di tipo int per controllare il suo valore. Se la condizione è VERA, l’istruzione IF dovrebbe stampare una dichiarazione.

Il codice:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

/*Dichiarare una variabile*/
DECLARE @val_chk INT;
/*Assegnare un valore*/
SET @val_chk = 101;
/*Eseguire la dichiarazione IF*/
IF @val_chk = 101
PRINT ‘La dichiarazione IF è TRUE’;
GO

L’output del codice precedente è:

“L’istruzione IF è VERA”

Come tale il valore della variabile è 101.

E se la condizione fosse FALSE?

Se la condizione di cui sopra fosse FALSE, per esempio il valore della variabile fosse diverso da 101, allora non succederebbe nulla.

Nello scenario del mondo reale, potreste voler eseguire un’istruzione o eseguire qualche azione quando la condizione nell’istruzione IF è VERA o FALSA.

Per questo, usate l’istruzione ELSE. L’istruzione all’interno dell’istruzione ELSE viene eseguita se la condizione nell’istruzione IF non è soddisfatta.

Vedi una dimostrazione qui sotto dell’utilizzo dell’istruzione ELSE:

Il codice IF ELSE:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

/*Dichiarare una variabile*/
DECLARE @val_chk INT;
/*Assegnare un valore*/
SET @val_chk = 50;
/*Eseguire la dichiarazione IF*/
IF @val_chk >= 101
PRINT ‘La dichiarazione IF è TRUE’;
ELSE
PRINT ‘L’istruzione IF è FLASE’;
GO

L’output del codice sopra è: “L’istruzione IF è FALSA” poiché il valore della variabile non è maggiore o uguale a 101.

Esecuzione di un’istruzione SELECT basata sul valore VARCHAR

Ora, lasciatemi mostrare un esempio di utilizzo di un valore stringa nell’istruzione IF. Una variabile stringa viene dichiarata e le viene assegnato un valore.

Nelle dichiarazioni IF…ELSE, controlleremo il valore della variabile ed eseguiremo la rispettiva istruzione SELECT. Date un’occhiata:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

/*Dichiarare una variabile stringa*/
DECLARE @table_name VARCHAR(60);
/*Assegnare un valore*/
SET @table_name = ’employees’;
/*Eseguire la dichiarazione IF*/
IF @table_name = ’employees’
SELECT * FROM sto_employees;
ELSE
SELECT * FROM sto_products;
GO

L’output del codice sopra è:

SQL IF ELSE

Cosa succede se abbiamo più scelte da controllare? (NESTED IF)

Negli esempi precedenti, avevamo solo due opzioni. O il valore è VERO o FALSO. Se VERO, l’istruzione all’interno dell’IF viene eseguita, altrimenti, viene eseguita la parte ELSE.

Nel caso dell’esecuzione di istruzioni SELECT, diciamo che abbiamo bisogno di controllare diversi nomi di tabelle ed eseguire la rispettiva istruzione SELECT per ciascuna; allora come possiamo farlo?

La risposta è usare l’istruzione NESTED IF.

Per esempio, se il valore della variabile è ’employees’ allora esegui:

SELECT * FROM sto_employees;

Se il valore è products allora esegui:

SELECT * FROM sto_products;

Per qualsiasi altro valore:

SELECT * FROM sto_emp_salary_paid;

Vedi come questo viene tradotto in dichiarazioni NESTED IF in SQL:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

/*Dichiarare una variabile stringa*/
DECLARE @table_name VARCHAR(60);
/*Assegnare un valore*/
SET @table_name = ‘products’;
/*Eseguire la dichiarazione IF*/
IF @table_name = ’employees’
SELECT * FROM sto_employees;
ELSE
BEGIN
IF @table_name = ‘products’
SELECT * FROM sto_products;
ELSE
SELECT * FROM sto_emp_salary_paid;
END ;
GO

Si può vedere, all’interno della dichiarazione ELSE, la parola chiave BEGIN viene usata dove viene messa un’altra dichiarazione IF (l’IF annidato). Questo è terminato usando la parola chiave END.

Lì, abbiamo messo un’altra condizione da controllare. Provate diversi valori per la variabile @table_name con i vostri nomi di tabelle e sostituitela anche nella dichiarazione SELECT per sperimentarla voi stessi.

Andando ad un altro livello nella dichiarazione IF annidata

Solo per mostrare che potete annidare molti livelli, sono andato oltre usando un’altra dichiarazione IF annidata.

Quindi, lo scenario è quello di controllare il valore di una variabile (table_name). se il valore è prodotti allora recuperate i dati dalla tabella sto_products. Se il valore è dipendenti allora recupera i record di sto_employees. Il terzo se controlla se il valore della variabile è ordini allora recupera i record dalla tabella ordini.

Infine, la dichiarazione ELSE per qualsiasi altro valore della variabile dovrebbe ottenere i record della tabella stipendio pagato del dipendente.

Vedi la dichiarazione IF multipla annidata per tre condizioni più ELSE:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45

/*Dichiarare una variabile stringa*/
DECLARE @table_name VARCHAR(60);
/*Assegnare un valore*/
SET @table_name = ‘orders’;
/*Eseguire la dichiarazione IF*/
IF @table_name = ’employees’
SELECT * FROM sto_employees;
ELSE
BEGIN
IF @table_name = ‘products’
SELECT * FROM sto_products;
ELSE
BEGIN
IF @table_name = ‘ordini’
SELECT * FROM sto_orders;
ELSE
SELECT * FROM sto_emp_salary_paid;
END ;
END ;
GO

Poiché ho impostato il valore della variabile come ordini, l’istruzione IF dovrebbe restituire i record dalla tabella sto_orders.

Nel codice, puoi vedere che la terza istruzione IF è iniziata dopo la seconda parola chiave BEGIN.

Nota: Se vuoi usare l’esecuzione condizionale nell’istruzione SELECT allora usa l’istruzione CASE in SQL.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.