您的位置:首页 > 数据库

T-SQL-流程控制语句 (转载)

2007-12-17 11:43 183 查看
 流程控制语句


流程控制语句是指那些用来控制程序执行和流程分支的命令,在SQL Server 2000中,育种控制语句主要用来控制SQL语句、语句块或者存储过程执行流程。


( 1 ). begin

end语句


begin

end语句能够将多个Transact - SQL语句组合成一个语句块,并将它们视为一个单元处理。在条件语句和循环等控制流程语句中,当符合特定条件便要执行两个或者多个语句时,就需要使用begin

end语句,其语法形式为:


begin


{sql_statement | statement_block}


end


例:


use  taihang


go


declare   @message   varchar ( 200 )


if   exists ( select   *   from  员工数据表


where  所属部门 = ' 办工室 ' )


begin


set   @message = ' 下列人员在办公室工作 '


print   @message


select  员工姓名  from  员工数据表


where  所属部门 = ' 办公室 '


end


else


begin


set   @message = ' 没有人在办公室 '


print   @message


end


go




( 2 ). if

else语句


if

else语句是条件判断语句,其中,else子句是可先的,最简单的if语句没有else子句部分。 if

else语句用来判断当某一条件成立时执行某段程序,条件不成立时执行另一段程序。SQL Server允许嵌套使用if

else语句,而且嵌套层数没有限制。


语法:


if  boolean_expression


 {sql_statement | statement_block}


[ else 


 {sql_statement|statement_block} ]




( 3 ). if

exists


1 > .if后面的布尔表达式可含有select语句,如果select语句一个值,它可用来与另一值进行比较,以得到布尔表达式。


2 > .如果select语句返回不止一个值,可使用if  exists .语法如下:


if   exists ( select  statement)


 {sql_statement | statement_block}


[ else [bolean_expression ]  


 {sql_statement | statement_block}]


例:查询标识号为1389的出版商出版的任何书的信息


if   exists ( select   *   from  titles


where  pub_id = ' 1389 ' )


begin


print ' 包含如下图书 '


select   *   from  titles


where  pub_id = ' 1389 '


end


else


print ' 无 '


注意:一定不要把if

exists和聚合函数一起使用,因为聚合函数总是返回数据,即使数据是0




( 4 ).while语句


while语句用于设置重复执行SQL语句或语句块的条件。只要指定的条件为真,就重复执行语句。其中,continue语句可以使程序跳过continue语句后面的语句,回到while循环的第一行命令。break语句则使程序完全跳出循环,结束while语句的执行。


1 > break语句交在某些情况发生时,立即无条件地退出最内层while循环,语法为:


while逻辑表达式


begin






break






end


2 > continue语句在某些情况发生时,控制程序跳出本次循环,重新天始下一次while循环。语法为:


while逻辑表达式


begin






continue






end


注意:如果select语句用作while语句的条件,那么,select语句必须包含在英文括号中。




例:


declare   @x   int ,  @y   int ,  @c   int


select   @x = 1 , @y = 1


while   @x < 3


begin


  print   @x


  while   @y < 3


  begin


   select   @c = 100 * @x + @y


   print   @c


   select   @y = @y + 1


  end


  select   @x = @x + 1


  select   @y = 1


end




( 5 ).case表达式


case表达式可以计算多个条件,并将其中一个符合条件的结果表达式返回。case表达式的语法为:


case  字段名或变量名


when  逻辑表达式1  then  结果表达式1


when  逻辑表达式2  then  结果表达式2


when  逻辑表达式3  then  结果表达式3






else  结果表达式


end




例:调整员工工资,工作级别为1的上调8 % ,工作级别为2的上调7 % ,工作级别为3的上调6 % ,其它上调5 %


use  taihang


go


update  employee


set  wage =


case


when  job_level = ' 1 '   then  wage * 1.08


when  job_level = ' 2 '   then  wage * 1.07


when  job_level = ' 3 '   then  wage * 1.06


else


then  wage * 1.05




( 6 ).return语句


return语句用于无条件地终止一个查询、存储过程或者批处理,此时位于return之后的程序将不会被执行。return语句的语法形式为:


return  整数表达式


通常,存储过程使用返回代码表示存储过程执行的成功或失败。无错误,则返回0,否则,返回非零值。




( 7 ).waitfor语句


waitfor语句用于暂时停止执行SQL语句、语句块或者存储过程等,直到所设定的时间已过或者所设定的时间已到才继续执行。


语法:


waitfor  delay 时间间隔


其中:时间间隔指定执行waitfor语句之前需要等待事件,最多为24小时。


也可写成: waitfor  time 时间值


其中,时间值指定waitfor语句将要执行的时间

 

流程控制语句
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语句将导致退出到下一个外层循环。首先运行内层循环结束之后的所有语句,然后下一个外层循环重新开始执行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息