Transact-SQL 語言使用的流程控制命令與常見的程序設計語言類似主要有以下幾種控制命令。
4.6.1 IF…ELSE
其語法如下:
IF <條件表達式>
<命令行或程序塊>
[ELSE [條件表達式]
<命令行或程序塊>]
其中<條件表達式>可以是各種表達式的組合,但表達式的值必須是邏輯值“真”或“假”。ELSE子句是可選的,最簡單的IF語句沒有ELSE子句部分。IF…ELSE用來判斷當某一條件成立時執行某段程序,條件不成立時執行另一段程序。如果不使用程序塊,IF或ELSE只能執行一條命令。IF…ELSE可以進行嵌套。
例4-9
declare@x int,@y int,@z int
select @x=1,@y=2, @z=3
if@x>@y
print'x>y' --打印字符串'x>y'
else if@y>@z
print'y>z'
else print'z>y'
運行結果如下
z>y
注意:在Transact-SQL中最多可嵌套32級。
4.6.2 BEGIN…END
其語法如下:
BEGIN
<命令行或程序塊>
END
BEGIN…END用來設定一個程序塊,將在BEGIN…END內的所有程序視為一個單元執行BEGIN…END經常在條件語句,如IF…ELSE中使用。在BEGIN…END中可嵌套另外的BEGIN…END來定義另一程序塊。
4.6.3 CASE
CASE 命令有兩種語句格式:
CASE <運算式>
WHEN <運算式>THEN<運算式>
…
WHEN<運算式>THEN<運算式>
[ELSE<運算式>]
END
CASE
WHEN <條件表達式> THEN <運算式>
WHEN <條件表達式> THEN <運算式>
[ELSE <運算式>]
END
CASE命令可以嵌套到SQL命令中。
例4-10:調整員工工資,工作級別為“1”的上調8%,工作級別為“2”的上調7%,工作級別為“3”的上調6%,其它上調5%。
use pangu
update employee
set e_wage =
case
when job_level = ’1’ then e_wage*1.08
when job_level = ’2’ then e_wage*1.07
when job_level = ’3’ then e_wage*1.06
else e_wage*1.05
end
注意:執行CASE子句時,只運行第一個匹配的子名。
4.6.4 WHILE…CONTINUE…BREAK
其語法如下:
WHILE <條件表達式>
BEGIN
<命令行或程序塊>
[BREAK]
[CONTINUE]
[命令行或程序塊]
END
WHILE 命令在設定的條件成立時會重復執行命令行或程序塊。CONTINUE命令可以讓程序跳過CONTINUE 命令之後的語句,回到WHILE 循環的第一行命令。BREAK 命令則讓程序完全跳出循環,結束WHILE 命令的執行。WHILE 語句也可以嵌套。
例4-11:
declare @x int @y int @c int
例4-11:
declare @x int, @y int, @c int
select @x = 1, @y=1
while @x < 3
begin
print @x --打印變量x 的值
while @y < 3
begin
select @c = 100*@ x+ @y
print @c --打印變量c 的值
select @y = @y + 1
end
select @x = @x + 1
select @y = 1
end
運行結果如下
1
101
102
2
201
202
4.6.5 WAITFOR
其語法如下:
WAITFOR {DELAY <‘時間’> | TIME <‘時間’>
| ERROREXIT | PROCESSEXIT | MIRROREXIT}