Konstrukcje IF..ELSE w MS SQL Server

Ogólnie rzecz biorąc, IF..ELSE jest instrukcją podejmowania decyzji w różnych językach programowania. Instrukcja IF jest używana do wykonania bloku kodu, jeśli warunek jest spełniony. Jeśli warunek nie jest spełniony (FALSE), wtedy opcjonalnie może być użyta instrukcja ELSE.

W przypadku SQL Server, instrukcja IF jest używana do wykonywania poleceń SQL, jeśli warunek jest TRUE.

Na przykład:

1
2
3
4
5
6
7

IF @table_name = ’employees’
SELECT * FROM sto_employees;
ELSE
SELECT * FROM sto_produktów;

W powyższym kodzie zmienną jest @table_name. Jeśli wartością przypisaną do tej zmiennej jest “pracownicy”, instrukcja IF pobierze dane z tabeli sto_pracowników. Jeśli wartość zmiennej jest inna niż “pracownik”, warunek IF staje się FALSE i zostanie wykonana część ELSE.

Pokażę Ci to proste użycie w poniższych przykładach z danymi wyjściowymi. W ostatniej sekcji, wyjaśnię również jak spełnić warunek “ELSE IF”, który nie jest dostępny w SQL Server.

Prosty przykład użycia instrukcji IF bez ELSE

Zacznijmy od prostego przykładu użycia instrukcji IF SQL. Dokonamy oceny zmiennej typu int, aby sprawdzić jej wartość. Jeśli warunek jest TRUE, instrukcja IF powinna wypisać oświadczenie.

Kod:

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

/*Deklarowanie zmiennej*/
DECLARE @val_chk INT;
/*Przypisanie zmiennej*/
SET @val_chk = 101;
/*Wykonanie instrukcji IF*/
IF @val_chk = 101
PRINT ‘The IF statement is TRUE’;
GO

Wyjściem powyższego kodu jest:

“Instrukcja IF jest TRUE”

Jako taka wartość zmiennej wynosi 101.

A co jeśli warunek byłby FAŁSZYWY?

Jeśli powyższy warunek byłby FAŁSZYWY, np. wartość zmiennej byłaby inna niż 101, to nic by się nie stało.

W prawdziwym scenariuszu, możesz chcieć wykonać instrukcję lub wykonać jakąś akcję, gdy warunek w instrukcji IF jest TRUE lub FALSE.

W tym celu użyj instrukcji ELSE. Instrukcja wewnątrz instrukcji ELSE zostanie wykonana, jeśli warunek w instrukcji IF nie zostanie spełniony.

Zobacz poniższe demo użycia instrukcji ELSE:

KOD 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

/*Deklarowanie zmiennej*/
DECLARE @val_chk INT;
/*Przypisanie zmiennej*/
SET @val_chk = 50;
/*Wykonanie instrukcji IF*/
IF @val_chk >= 101
PRINT ‘The IF statement is TRUE’;
ELSE
PRINT ‘The IF statement is FLASE’;
GO

Wynikiem powyższego kodu jest: “The IF statement is FALSE”, ponieważ wartość zmiennej nie jest większa lub równa 101.

Wykonanie instrukcji SELECT na podstawie wartości VARCHAR

Teraz pokażę przykład użycia wartości łańcuchowej w instrukcji IF. Deklarujemy zmienną łańcuchową i przypisujemy jej wartość.

W instrukcji IF…ELSE sprawdzimy wartość zmiennej i wykonamy odpowiednią instrukcję SELECT. Przyjrzyj się:

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

/*Deklarowanie zmiennej łańcuchowej*/
DECLARE @nazwa_tablicy VARCHAR(60);
/*Przypisanie wartości*/
SET @tablica_nazwa = ‘pracownicy’;
/*Wykonanie instrukcji IF*/
IF @tablica_nazwa = ‘pracownicy’
SELECT * FROM sto_pracowników;
ELSE
SELECT * FROM sto_produktów;
GO

Wynikiem powyższego kodu jest:

SQL IF ELSE

Co jeśli mamy wiele wyborów do sprawdzenia? (NESTED IF)

W powyższych przykładach, mieliśmy tylko dwie opcje. Albo wartość jest TRUE lub FALSE. Jeśli TRUE, instrukcja wewnątrz IF jest wykonywana, w przeciwnym razie wykonywana jest część ELSE.

W przypadku wykonywania instrukcji SELECT, powiedzmy, że wymagamy sprawdzenia różnych nazw tabel i wykonania odpowiedniej instrukcji SELECT dla każdej z nich; jak możemy to zrobić?

Odpowiedzią jest użycie instrukcji NESTED IF.

Na przykład, jeśli wartością zmiennej jest ’employees’ to wykonaj:

SELECT * FROM sto_employees;

Jeśli wartością są produkty to wykonaj:

SELECT * FROM sto_products;

Dla każdej innej wartości:

SELECT * FROM sto_emp_salary_paid;

Zobacz jak to się przekłada na instrukcje NESTED IF w 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

/*Deklarowanie zmiennej łańcuchowej*/
DECLARE @nazwa_tablicy VARCHAR(60);
/*Przypisanie wartości*/
SET @tabela_nazwa = ‘produkty’;
/*Wykonanie instrukcji IF*/
IF @tabela_nazwa = ‘pracownicy’
SELECT * FROM sto_pracowników;
ELSE
BEGIN
IF @table_name = ‘produkty’
SELECT * FROM sto_produkty;
ELSE
SELECT * FROM sto_emp_salary_paid;
END ;
GO

Widzisz, wewnątrz instrukcji ELSE użyte jest słowo kluczowe BEGIN, w którym umieszczona jest kolejna instrukcja IF (zagnieżdżone IF). To jest zakończone przez użycie słowa kluczowego END.

Tutaj, umieściliśmy kolejny warunek do sprawdzenia. Spróbuj różnych wartości dla zmiennej @table_name przez własne nazwy tabel i zastąp je w instrukcji SELECT, aby doświadczyć tego samemu.

Kolejny poziom w zagnieżdżonej instrukcji IF

Tylko po to, aby pokazać, że możesz zagnieżdżać się na wielu poziomach, poszedłem dalej używając innej zagnieżdżonej instrukcji IF.

Więc, scenariusz ma na celu sprawdzenie wartości zmiennej (table_name). jeśli wartością są produkty to pobierz dane z tabeli sto_products. Jeżeli wartością jest employees to pobieramy dane z rekordów sto_employees. Trzecia instrukcja if sprawdza, czy wartością zmiennej jest orders, wtedy pobieramy rekordy z tabeli orders.

Na koniec instrukcja ELSE dla każdej innej wartości zmiennej powinna pobrać rekordy z tabeli salary paid pracownika.

Zobacz wielokrotnie zagnieżdżoną instrukcję IF dla trzech warunków 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

/*Deklarowanie zmiennej łańcuchowej*/
DECLARE @nazwa_tablicy VARCHAR(60);
/*Przypisanie wartości*/
SET @tabela_nazwa = ‘zamówienia’;
/*Wykonanie instrukcji IF*/
IF @tabela_nazwa = ‘pracownicy’
SELECT * FROM sto_pracowników;
ELSE
BEGIN
IF @table_name = ‘produkty’
SELECT * FROM sto_produkty;
ELSE
BEGIN
IF @table_name = ‘orders’
SELECT * FROM sto_orders;
ELSE
SELECT * FROM sto_emp_salary_paid;
END ;
END ;
GO

Jako, że ustawiłem wartość zmiennej jako zamówienia, instrukcja IF powinna zwrócić rekordy z tabeli sto_zamówienia.

W kodzie można zauważyć, że trzecia instrukcja IF jest uruchamiana po drugim słowie kluczowym BEGIN.

Uwaga: Jeśli chcesz użyć wykonania warunkowego w instrukcji SELECT, to użyj instrukcji CASE w SQL.

.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.