6.1 IF…ELSE
其語法如下:
IF <條件表達式>
<命令行或程序塊>
[ELSE [條件表達式]
<命令行或程序塊>]
其中<條件表達式>可以是各種表達式的組合,但表達式的值必須是邏輯值“真”或“假”。ELSE子句是可選的,最簡單的IF語句沒有ELSE子句部分。IF…ELSE用來判斷當某一條件成立時執行某段程序,條件不成立時執行另一段程序。如果不使用程序塊,IF或ELSE只能執行一條命令。IF…ELSE可以進行嵌套。
例6-1
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級。
6.2 BEGIN…END
其語法如下:
BEGIN
<命令行或程序塊>
END
BEGIN…END用來設定一個程序塊,將在BEGIN…END內的所有程序視爲一個單元執行BEGIN…END經常在條件語句,如IF…ELSE中使用。在BEGIN…END中可嵌套另外的BEGIN…END來定義另一程序塊。
6.3 CASE
CASE 命令有兩種語句格式:
CASE <運算式>
WHEN <運算式>THEN<運算式>
……
WHEN<運算式>THEN<運算式>
[ELSE<運算式>]END
CASE
WHEN <條件表達式> THEN <運算式>
WHEN <條件表達式> THEN <運算式>
[ELSE <運算式>]
END
例6-2:調整員工工資,工作級別爲“1”的上調8%,工作級別爲“2”的上調7%,工作級別爲“3”的上調6%,其它上調5%。
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子句時,只運行第一個匹配的子名。
6.4 WHILE…CONTINUE…BREAK
其語法如下:
WHILE <條件表達式>
BEGIN
<命令行或程序塊>
[BREAK]
[CONTINUE]
[命令行或程序塊]
END
WHILE 命令在設定的條件成立時會重複執行命令行或程序塊。CONTINUE命令可以讓程序跳過CONTINUE 命令之後的語句,回到WHILE 循環的第一行命令。BREAK 命令則讓程序完全跳出循環,結束WHILE 命令的執行。WHILE 語句也可以嵌套
6.5 WAITFOR
其語法如下:
WAITFOR {DELAY <‘時間’> | TIME <‘時間’>
| ERROREXIT | PROCESSEXIT | MIRROREXIT}
WAITFOR 命令用來暫時停止程序執行,直到所設定的等待時間已過或所設定的時間已到才繼續往下執行。其中‘時間’必須爲DATETIME 類型的數據,如:‘11:15:27’,
但不能包括日期各關鍵字含義如下:
DELAY 用來設定等待的時間最多可達24 小時; TIME 用來設定等待結束的時間點; ERROREXIT 直到處理非正常中斷; PROCESSEXIT 直到處理正常或非正常中斷; MIRROREXIT 直到鏡像設備失敗。例4-12 等待1 小時2 分零3 秒後才執行SELECT 語句
waitfor delay ’01:02:03’
select * from employee
6.6 GOTO
語法如下:
GOTO 標識符
GOTO 命令用來改變程序執行的流程,使程序跳到標有標識符的指定的程序行再繼續往下執行。作爲跳轉目標的標識符可爲數字與字符的組合,但必須以“:”結尾,如‘12:’或‘a_1:’。在GOTO 命令行,標識符後不必跟“:”。
例4-14 分行打印字符‘1’、‘2’、‘3’、‘4’、‘5’
declare @x int
select @x = 1
label_1
print @x
select @x = @x + 1
while @x < 6
goto label_1
6.7 RETURN
語法如下
RETURN [整數值]
RETURN 命令用於結束當前程序的執行,返回到上一個調用它的程序或其它程序。在括號內可指定一個返回值。
例4-15
declare @x int @y int
select @x = 1 @y = 2
if x>y
return 1
else
return 2
如果沒有指定返回值,SQL Server 系統會根據程序執行的結果返回一個內定值
其他命令
DECLARE
語法如下:
DECLARE {{ @local_variable data_type }
| { @cursor_variable_name CURSOR }
| { table_type_definition }
} [,...n]]
DECLARE 命令用於聲明一個或多個局部變量、遊標變量或表變量。在用DECLARE命令聲明之後,所有的變量都被賦予初值NULL。需要用SELECT 或SET命令來給變量賦值。變量類型可爲系統定義的或用戶定義的類型,但不能爲TEXT、NTEXT、IMAGE類型。CURSOR 指名變量是局部的遊標變量