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
《命令列或程式塊》
endbegin…end用來設定乙個程式塊,將在begin…end內的所有程式視為乙個單元執行begin…end經常在條件語句,如if…else中使用。在begin…end中可巢狀另外的begin…end來定義另一程式塊。
4.6.3 case
case 命令有兩種語句格式:
case 《表示式》
when 《表示式》then《表示式》
… when《表示式》then《表示式》
[else《表示式》]
endcase
when 《條件表示式》 then 《表示式》
when 《條件表示式》 then 《表示式》
[else 《表示式》]
endcase命令可以巢狀到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]
[命令列或程式塊]
endwhile 命令在設定的條件成立時會重複執行命令列或程式塊。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
endselect @x = @x + 1
select @y = 1
end執行結果如下
1101
1022
201202
4.6.5 waitfor
其語法如下:
waitfor
waitfor 命令用來暫時停止程式執行,直到所設定的等待時間已過或所設定的時間已到才繼續往下執行。其中『時間』必須為datetime 型別的資料,如:『11:15:27』,
但不能包括日期各關鍵字含義如下:
· delay 用來設定等待的時間最多可達24 小時;
· time 用來設定等待結束的時間點;
· errorexit 直到處理非正常中斷;
· proces***it 直到處理正常或非正常中斷;
· mirrorexit 直到映象裝置失敗。
例4-12 等待1 小時2 分零3 秒後才執行select 語句
waitfor delay 』01:02:03』
select * from employee
例4-13:等到晚上11 點零8 分後才執行select 語句
waitfor time 』23:08:00』
select * from employee
4.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
4.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 系統會根據程式執行的結果返回乙個內定值,如
表4-5 所示。
如果執行過程產生了多個錯誤,sql server系統將返回絕對值最大的數值;如果此時使用者此時定義了返回值,則以返回使用者定義的值。return語句不能返回null值。
SQL條件判斷語句
select case when price is null then not yet priced when price 10 then very reasonable title when price 10 and price 20 then coffee table title else ex...
SQL常用條件查詢語句
select from table1 where 工資 2500 and 工資 3000 同上 select 姓名 from table1 where 性別 0 and 工資 4000 select from table1 where not 工資 3200 select from table1 o...
SQL語句多條件查詢
sql多條件查詢中如果有and和or,and的優先順序高於or,如果不加括號會先執行and,然後再執行or 資料表 一 查詢時先且查詢,則先and條件查詢,查詢結果與or後面的條件進行或查詢 sql語句 select from ceshi where name a and age 10 or 1查詢...