F IF..ELSE statements i MS SQL Server

I allmänhet är IF..ELSE ett beslutsfattande statement i olika programmeringsspråk. IF-angivelsen används för att exekvera ett kodblock om ett villkor är uppfyllt. Om ett villkor inte är uppfyllt (FALSK) kan eventuellt ELSE-anvisningen användas.

I fallet SQL Server används IF-anvisningen för att exekvera SQL-anvisningar om ett villkor är VIKTIGT.

Till exempel:

1
2
3
4
5
6
7

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

I ovanstående kod är @table_name en variabel. Om ett värde som tilldelats denna variabel är “employees” kommer IF-anvisningen att hämta data från tabellen sto_employees. Om värdet på variabeln är något annat än “employee” blir IF-villkoret FALSE och ELSE-delen utförs.

Jag kommer att visa denna enkla användning i exemplen nedan med utdata. I det sista avsnittet kommer jag också att förklara hur man uppfyller “ELSE IF” syfte som inte är tillgängligt i SQL Server.

Ett enkelt exempel på att använda IF-anvisningen utan ELSE

Låt mig börja med ett enkelt exempel på att använda IF SQL-anvisningen. Vi kommer att utvärdera en variabel av typen int för att kontrollera dess värde. Om villkoret är TRUE ska IF-anvisningen skriva ut ett uttalande.

Koden:

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

/*Deklarera en variabel*/
DECLARE @val_chk INT;
/*Att tilldela en variabel*/
SET @val_chk = 101;
/*Exekvering av IF-anvisningen*/
IF @val_chk = 101
PRINT ‘IF-anvisningen är TRUE’;
GO

Utgången av ovanstående kod är:

“The IF statement is TRUE”

Som sådan är värdet på variabeln 101.

Hur blir det om villkoret är FALSK?

Om ovanstående villkor är FALSK, t.ex. om värdet på variabeln är annat än 101, händer ingenting.

I det verkliga scenariot kan det hända att du vill utföra ett uttalande eller utföra någon åtgärd eftersom villkoret i IF-uttalandet är SANT eller FALSK.

För detta använder du ELSE-uttalandet. Uttalandet inuti ELSE-uttalandet utförs om villkoret i IF-uttalandet inte är uppfyllt.

Se en demo nedan om hur man använder ELSE-anvisningen:

Den IF ELSE CODE:

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

/*Deklarera en variabel*/
DECLARE @val_chk INT;
/*Att tilldela en variabel*/
SET @val_chk = 50;
/*Exekvering av IF-anvisningen*/
IF @val_chk >= 101
PRINT ‘IF-anvisningen är TRUE’;
ELSE
PRINT ‘IF-satsen är FEL’;
GO

Utgången av ovanstående kod är: “

Exekvering av ett SELECT-meddelande baserat på ett VARCHAR-värde

Nu ska jag visa ett exempel på hur man använder ett strängvärde i IF-meddelandet. En strängvariabel deklareras och tilldelas ett värde.

I IF…ELSE-anvisningarna kontrollerar vi värdet på variabeln och utför respektive SELECT-anvisning. Ta en titt:

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

/*Deklarering av en strängvariabel*/
DECLARE @table_name VARCHAR(60);
/*Att tilldela ett värde*/
SET @table_name = “employees”;
/*Exekvera IF-anvisningen*/
IF @table_name = “employees”
SELECT * FROM sto_employees;
ELSE
SELECT * FROM sto_products;
GO

Utgången av ovanstående kod är:

SQL IF ELSE

Vad händer om vi har flera alternativ att kontrollera? (NESTED IF)

I ovanstående exempel hade vi bara två alternativ. Antingen är värdet TRUE eller FALSE. Om det är sant utförs uttalandet inom IF, annars utförs ELSE-delen.

Vid utförandet av SELECT-uttalanden, låt oss säga att vi måste kontrollera olika tabellnamn och utföra respektive SELECT-uttalande för vart och ett av dem, hur kan vi göra det?

Svaret är att använda NESTED IF-uttalandet.

Till exempel, om värdet på variabeln är “employees”, kör då:

SELECT * FROM sto_employees;

Om värdet är “products”, kör då:

SELECT * FROM sto_products;

För varje annat värde:

SELECT * FROM sto_emp_salary_paid;

Se hur detta översätts till NESTED IF-satser i 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

/*Deklarering av en strängvariabel*/
DECLARE @table_name VARCHAR(60);
/*Att tilldela ett värde*/
SET @table_name = “products”;
/*Exekvera IF-anvisningen*/
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

Du ser att nyckelordet BEGIN används inuti ELSE-angivelsen där en annan IF-angivelse är placerad (nested IF). Detta avslutas med nyckelordet END.

Där har vi placerat ytterligare ett villkor att kontrollera. Prova olika värden för variabeln @table_name med dina egna tabellnamn och byt ut dem i SELECT-uttalandet också för att uppleva det själv.

Går ytterligare en nivå i NESTED IF-uttalandet

Bara för att visa att man kan nestas i många nivåer har jag gått vidare genom att använda ett annat nästlat IF-uttalande.

Så, scenariot är att kontrollera värdet på en variabel (table_name). om värdet är products hämtar man då data från tabellen sto_products. Om värdet är anställda hämtar du sedan uppgifterna från sto_employees. Det tredje if kontrollerar om värdet av variabeln är orders hämtar då posterna från tabellen orders.

Slutligt ska ELSE-anvisningen för något annat värde av variabeln hämta posterna från tabellen employee’s salary paid.

Se de flera inbäddade IF-anvisningarna för tre villkor 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

/*Deklarering av en strängvariabel*/
DECLARE @table_name VARCHAR(60);
/*Att tilldela ett värde*/
SET @table_name = “orders”;
/*Exekvera IF-anvisningen*/
IF @table_name = “employees”
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

Som jag har angett värdet på variabeln som orders bör IF-anvisningen returnera posterna från tabellen sto_orders.

I koden kan du se att det tredje IF-uttalandet startas efter det andra nyckelordet BEGIN.

Notera: Om du vill använda villkorlig exekvering i SELECT-uttalandet, använd då CASE-uttalandet i SQL.

Lämna ett svar

Din e-postadress kommer inte publiceras.