官术网_书友最值得收藏!

5.5 流程控制語句

到現在為止,介紹的T-SQL代碼都是按從上到下的順序執行,但是通過T-SQL中的流程控制語句,可以根據業務的需要改變代碼的執行順序,T-SQL中可以用來編寫流程控制模塊的語句有:BEGIN…END語句、IF…ELSE語句、CASE語句、WHILE語句、GOTO語句、BREAKE語句、WAITFOR語句和RETURN語句。本節將分別介紹各種不同控制語句的用法。

5.5.1 BEGIN…END語句

語句塊是多條Transact-SQL語句組成的代碼段,從而可以執行一組Transact-SQL語句。BEGIN和END是控制流語言的關鍵字。BEGIN…END語句塊通常包含在其他控制流程中,用來完成不同流程中有差異的代碼功能。例如,對于IF…ELSE語句或執行重復語句的WHILE語句,如果不是有語句塊,這些語句中只能包含一條語句,但是實際的情況可能需要復雜的處理過程。BEGIN...END語句塊允許嵌套。

【例5.32】定義局部變量@count,如果@count值小于10,執行WHILE循環操作中的語句塊,輸入語句如下。

代碼執行結果如圖5-25所示。

圖5-25 BEGIN…END語句塊

該段代碼執行了一個循環過程,當局部變量@count值小于10的時候,執行WHILE循環內的PRINT語句,打印輸出當前@count變量的值;對@count執行加1操作之后,回到WHILE語句的開始重復執行BEGIN...END語句塊中的內容;直到@count的值大于等于10,此時WHILE后面的表達式不成立,將不再執行循環。最后打印輸出當前的@count值,結果為10。

5.5.2 IF…ELSE語句

IF…ELSE語句用于在執行一組代碼之前進行條件判斷,根據判斷的結果執行不同的代碼。IF...ELSE語句對布爾表達式進行判斷,如果布爾表達式返回TRUE,則執行IF關鍵字后面的語句塊;如果布爾表達式返回FALSE,則執行ELSE關鍵字后面的語句塊。語法格式如下。

Boolean_expression是一個表達式,表達式計算的結果為邏輯真值(TRUE)或假值(FALSE)。當條件成立時,執行某段程序;條件不成立時,執行另一段程序。IF…ELSE語句可以嵌套使用。

【例5.33】IF…ELSE流程控制語句的使用,輸入語句如下。

代碼執行結果如圖5-26所示。

圖5-26 IF…ELSE流程控制語句

由結果可以看到,變量@age值為40,大于30,因此表達式@age<30不成立,返回結果為邏輯假值(FALSE),所以執行第6行的PRINT語句,輸出結果為字符串“This is an old man!”。

5.5.3 CASE語句

CASE是多條件分支語句,相比IF…ELSE語句,CASE語句進行分支流程控制可以使代碼更加清晰,易于理解。CASE語句也根據表達式邏輯值的真假來決定執行的代碼流程,CASE語句有兩種格式。

1.格式1

在第一種格式中,CASE語句在執行時,將CASE后的表達式的值與各WHEN子句的表達式值比較,如果相等,則執行THEN后面的表達式或語句,然后跳出CASE語句;否則,返回ELSE后面的表達式。

【例5.34】使用CASE語句根據學生姓名判斷各個學生在班級的職位,輸入語句如下。

代碼執行結果如圖5-27所示。

圖5-27 使用CASE語句對學生職位進行判斷

2.格式2

在第二種格式中,CASE關鍵字后面沒有表達式,多個WHEN子句中的表達式依次執行,如果表達式結果為真,則執行相應THEN關鍵字后面的表達式或語句,執行完畢之后跳出CASE語句。如果所有WHEN語句都為FALSE,則執行ELSE子句中的語句。

【例5.35】使用CASE語句對考試成績進行評定,輸入語句如下。

代碼執行結果如圖5-28所示。

圖5-28 使用CASE語句對考試成績進行評價

5.5.4 WHILE語句

WHILE語句根據條件重復執行一條或多條T-SQL代碼,只要條件表達式為真,就循環執行語句。在WHILE語句中可以通過CONTINUE或者BREAK語句跳出循環。WHILE語句的基本語法格式如下。

  • Boolean_expression:返回TRUE或FALSE的表達式。如果布爾表達式中含有SELECT語句,則必須用括號將SELECT語句括起來。
  • {sql_statement | statement_block}:Transact-SQL語句或用語句塊定義的語句分組。若要定義語句塊,需要使用控制流關鍵字BEGIN和END。
  • BREAK:導致從最內層的WHILE循環中退出。將執行出現在END關鍵字(循環結束的標記)后面的任何語句。
  • CONTINUE:使WHILE循環重新開始執行,忽略CONTINUE關鍵字后面的任何語句。

【例5.36】WHILE循環語句的使用,輸入語句如下。

該段代碼執行過程如圖5-29所示。

圖5-29 WHILE循環語句中的語句塊嵌套

5.5.5 GOTO語句

GOTO語句表示將執行流更改到標簽處。跳過GOTO后面的Transact-SQL語句,并從標簽位置繼續處理。GOTO語句和標簽可在過程、批處理或語句塊中的任何位置使用。GOTO語句的語法格式如下。

定義標簽名稱,使用GOTO語句跳轉時,要指定跳轉標簽名稱。

使用GOTO語句跳轉到標簽處。

【例5.37】GOTO語句的使用,輸入語句如下。

代碼執行結果如圖5-30所示。

圖5-30 GOTO語句

5.5.6 WAITFOR語句

WAITFOR語句用來暫時停止程序的執行,直到所設定的等待時間已過或所設定的時刻快到,才繼續往下執行。延遲時間和時刻的格式為“HH:MM:SS”。在WAITFOR語句中不能指定日期,并且時間長度不能超過24小時。WAITFOR語句的語法格式如下。

  • DELAY:指定可以繼續執行批處理、存儲過程或事務之前必須經過的指定時段,最長可為24小時。
  • TIME:指定運行批處理、存儲過程或事務的時間點。只能使用24小時制的時間值,最大延遲為一天。

【例5.38】10s的延遲后執行SET語句,輸入語句如下。

代碼執行結果如圖5-31所示。

圖5-31 WAITFOR語句

該段代碼為@name賦值后,并不能立刻顯示該變量的值,延遲10秒鐘后,將看到輸出結果。

5.5.7 RETURN語句

RETURN表示從查詢或過程中無條件退出。RETURN的執行是即時且完全的,可在任何時候用于從過程、批處理或語句塊中退出。RETURN之后的語句是不執行的。語法格式如下。

integer_expression為返回的整數值。存儲過程可向執行調用的過程或應用程序返回一個整數值。

提示

除非另有說明,所有系統存儲過程均返回0值。此值表示成功,而非零值則表示失敗。RETURN語句不能返回空值。

主站蜘蛛池模板: 福建省| 华阴市| 腾冲县| 佛山市| 航空| 榆社县| 报价| 勐海县| 萨嘎县| 新竹市| 碌曲县| 西充县| 武平县| 康定县| 沅江市| 慈溪市| 科技| 沐川县| 黑水县| 阿克| 万年县| 康马县| 改则县| 女性| 乳山市| 同心县| 谷城县| 嵩明县| 高碑店市| 定远县| 莱芜市| 江陵县| 察隅县| 唐山市| 辽阳市| 西乌珠穆沁旗| 斗六市| 玉屏| 三台县| 临沂市| 山阴县|