六、流程控制命令

Transact-SQL 語言使用的流程控制命令與常見的程序設計語言類似主要有以下幾種控制命令

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 指名變量是局部的遊標變量





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章