În general, IF..ELSE este o instrucțiune de luare a deciziilor în diferite limbaje de programare. Instrucțiunea IF este utilizată pentru a executa un bloc de cod în cazul în care o condiție este îndeplinită. Dacă o condiție nu este satisfăcută (FALSE), atunci, opțional, se poate utiliza instrucțiunea ELSE.
În cazul SQL Server, instrucțiunea IF este utilizată pentru a executa instrucțiuni SQL dacă o condiție este TRUE.
De exemplu:
1
2
3
4
5
6
7
|
IF @table_name = ’employees’
SELECT * FROM sto_employees;
ELSE
SELECT * FROM sto_produse;
|
În codul de mai sus, @table_name este o variabilă. Dacă o valoare atribuită acestei variabile este “employees”, instrucțiunea IF va prelua datele din tabelul sto_employees. Dacă valoarea variabilei este oricare alta decât “employee”, condiția IF devine FALSE și se va executa partea ELSE.
Voi arăta această utilizare simplă în exemplele de mai jos cu ieșire. În ultima secțiune, voi explica, de asemenea, cum să îndeplinesc scopul “ELSE IF”, care nu este disponibil în SQL Server.
Un exemplu simplu de utilizare a instrucțiunii IF fără ELSE
Dați-mi voie să încep cu un exemplu simplu de utilizare a instrucțiunii SQL IF. Vom evalua o variabilă de tip int pentru a-i verifica valoarea. Dacă condiția este TRUE, instrucțiunea IF ar trebui să tipărească o declarație.
Codul:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
/*Declararea unei variabile*/
DECLARE @val_chk INT;
/*Asignarea unei valye*/
SET @val_chk = 101;
/*Executarea instrucțiunii IF*/
IF @val_chk = 101
PRINT ‘The IF statement is TRUE’;
GO
|
Lovitura codului de mai sus este:
“Instrucțiunea IF este TRUE”
Ca atare, valoarea variabilei este 101.
Ce se întâmplă dacă condiția a fost FALSE?
Dacă condiția de mai sus a fost FALSE, de exemplu, valoarea variabilei a fost alta decât 101, atunci nu se va întâmpla nimic.
În scenariul din lumea reală, este posibil să doriți să executați o instrucțiune sau să efectuați o acțiune deoarece condiția din instrucțiunea IF este TRUE sau FALSE.
Pentru aceasta, utilizați instrucțiunea ELSE. Instrucțiunea din interiorul instrucțiunii ELSE se execută în cazul în care condiția din instrucțiunea IF nu este îndeplinită.
Vezi mai jos o demonstrație de utilizare a instrucțiunii ELSE:
Codul 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
|
/*Declararea unei variabile*/
DECLARE @val_chk INT;
/*Asignarea unei valye*/
SET @val_chk = 50;
/*Executarea instrucțiunii IF*/
IF @val_chk >= 101
PRINT ‘The IF statement is TRUE’;
ELSE
PRINT ‘The IF statement is FLASE’;
GO
|
Lovitura codului de mai sus este: “Instrucțiunea IF este FALSE” deoarece valoarea variabilei nu este mai mare sau egală cu 101.
Executarea unei instrucțiuni SELECT pe baza unei valori VARCHAR
Acum, permiteți-mi să arăt un exemplu de utilizare a unei valori de tip șir de caractere în instrucțiunea IF. Se declară o variabilă string și i se atribuie o valoare.
În instrucțiunile IF…ELSE, vom verifica valoarea variabilei și vom executa instrucțiunea SELECT respectivă. Aruncați o privire:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
/*Declararea unei variabile de tip șir de caractere*/
DECLARE @table_name VARCHAR(60);
/*Asignarea unei valori*/
SET @table_name = ’employees’;
/*Executarea instrucțiunii IF*/
IF @table_name = ’employees’
SELECT * FROM sto_employees;
ELSE
SELECT * FROM sto_produse;
GO
|
Lovitura codului de mai sus este:
Ce se întâmplă dacă avem mai multe opțiuni de verificat? (NESTED IF)
În exemplele de mai sus, am avut doar două opțiuni. Fie valoarea este TRUE, fie FALSE. Dacă TRUE, se execută instrucțiunea din interiorul IF, în caz contrar, se execută partea ELSE.
În cazul executării instrucțiunilor SELECT, să spunem că avem nevoie să verificăm diferite nume de tabele și să executăm instrucțiunea SELECT respectivă pentru fiecare; atunci cum putem face acest lucru?
Răspunsul este utilizarea instrucțiunii NESTED IF.
De exemplu, dacă valoarea variabilei este ’employees’ atunci executați:
SELECT * FROM sto_employees;
Dacă valoarea este products atunci executați:
SELECT * FROM sto_produse;
Pentru orice altă valoare:
SELECT * FROM sto_emp_salary_paid;
Vezi cum se traduce acest lucru în declarații IF NESTED în 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
|
/*Declararea unei variabile de tip șir de caractere*/
DECLARE @table_name VARCHAR(60);
/*Asignarea unei valori*/
SET @table_name = ‘products’;
/*Executarea instrucțiunii 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
|
Vezi, în interiorul instrucțiunii ELSE, se folosește cuvântul cheie BEGIN unde este plasată o altă instrucțiune IF (IF imbricata). Aceasta se termină prin utilizarea cuvântului cheie END.
Aici am plasat o altă condiție de verificat. Încercați diferite valori pentru variabila @nume_tabel cu propriile nume de tabele și înlocuiți-le și în instrucțiunea SELECT pentru a experimenta singuri.
Căutând un alt nivel în instrucțiunea IF NESTED
Doar pentru a arăta că se pot anina la mai multe niveluri, am mers mai departe folosind o altă instrucțiune IF imbricata.
Deci, scenariul este de a verifica valoarea unei variabile (nume_tabel). dacă valoarea este produse, atunci se recuperează datele din tabelul sto_produse. Dacă valoarea este angajați, atunci se obțin înregistrările din sto_employees. Al treilea if verifică dacă valoarea variabilei este comenzi, atunci preluați înregistrările din tabelul comenzi.
În cele din urmă, instrucțiunea ELSE pentru orice altă valoare a variabilei ar trebui să obțină înregistrările din tabelul salarii plătite ale angajaților.
Vezi mai multe instrucțiuni IF imbricate pentru trei condiții plus 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
|
/*Declararea unei variabile de tip șir de caractere*/
DECLARE @table_name VARCHAR(60);
/*Asignarea unei valori*/
SET @table_name = ‘comenzi’;
/*Executarea instrucțiunii IF*/
IF @table_name = ‘angajați’
SELECT * FROM sto_employees;
ELSE
BEGIN
IF @table_name = ‘products’
SELECT * FROM sto_products;
ELSE
BEGIN
IF @table_name = ‘orders’
SELECT * FROM sto_orders;
ELSE
SELECT * FROM sto_emp_salary_paid;
END ;
END ;
GO
|
Cum am setat valoarea variabilei ca fiind comenzi, instrucțiunea IF ar trebui să returneze înregistrările din tabelul sto_orders.
În cod, puteți vedea că a treia instrucțiune IF este începută după al doilea cuvânt cheie BEGIN.
Nota: Dacă doriți să utilizați execuția condiționată în instrucțiunea SELECT, atunci utilizați instrucțiunea CASE în SQL.
.