流程控制语句

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<运算式>

     …

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语句将导致退出到下一个外层循环。首先运行内层循环结束之后的所有语句,然后下一个外层循环重新开始执行。