Transact-SQL語言提供了一些可以用於改變語句執行順序的命令,稱為流程控制語句。流程控制語句允許用戶更好地組織存儲過程中的語句,方便地實現程序的功能。流程控制語句與常見的程序設計語言類似,主要包含以下幾種。
(1) IF…ELSE語句
IF <條件表達式>
<命令行或程序塊>
[ELSE [條件表達式]
<命令行或程序塊>]
其中<條件表達式>可以是各種表達式的組合,但表達式的值必須是“真”或“假”。ELSE子句是可選的。IF…ELSE語句用來判斷當某一條件成立時執行某段程序,條件不成立時執行另一段程序。如果不使用程序塊,IF或ELSE只能執行一條命令。IF…ELSE可以嵌套使用,最多可嵌套32級。
(2) BEGIN…END語句
BEGIN
<命令行或程序塊>
END
BEGIN…END用來設置一個程序塊,該程序塊可以被視為一個單元執行。BEGIN…END經常在條件語句中使用,如IF…ELSE語句。如果當IF或ELSE子句為真時,想讓程序執行其後的多條語句,這時就要把這多條語句用BEGIN…END括起來使之成為一個語句塊。在BEGIN…END語句中可以嵌套另外的BEGIN…END語句來定義另一程序塊。
(3) CASE語句
CASE<運算式>
WHEN<運算式>THEN<運算式>
amily: 宋體;">…
WHEN<運算式>THEN<運算式>
[ELSE<運算式>]
END
例如,在pubs數據庫中查詢每個作者所居住州的全名,可以使用如下代碼實現:
SELECT au_fname, au_lname,
CASE state
WHEN ''CA'' THEN ''California''
WHEN ''KS'' THEN ''Kansas''
WHEN ''TN'' THEN ''Tennessee''
WHEN ''OR'' THEN ''Oregon''
WHEN ''MI'' THEN ''Michigan''
WHEN ''IN'' THEN ''Indiana''
WHEN ''MD'' THEN ''Maryland''
WHEN ''UT'' THEN ''Utah''
END AS StateName
FROM pubs.dbo.authors
ORDER BY au_lname
執行結果:
au_fname au_lname StateName
-------------------- ---------------------------------------- ----------
Abraham Bennet California
Reginald Blotchet-Halls Oregon
Cheryl Carson California
Michel DeFrance Indiana
Innes del Castillo Michigan
Ann Dull California
…
(4) WHILE…CONTINUE…BREAK語句
WHILE<條件表達式>
BEGIN
<命令行或程序塊>
[BREAK]
[CONTINUE]
[命令行或程序塊]
END
WHILE語句在設置的條件為真時會重復執行命令行或程序塊。
CONTINUE語句可以讓程序跳過CONTINUE語句之後的語句,回到WHILE循環的第一行。BREAK語句則讓程序完全跳出循環,結束WHILE循環的執行。WHILE語句也可以嵌套使用。
注意:如果嵌套了兩個或多個WHILE循環,內層的BREAK語句將導致退出到下一個外層循環。首先運行內層循環結束之後的所有語句,然後下一個外層循環重新開始執行。