流程控制语句
流程控制语句是指那些用来控制程序执行和流程分支的命令,在SQL Server 2000中,育种控制语句主要用来控制SQL语句、语句块或者存储过程执行流程。
( 1 ). begin end语句
begin end语句能够将多个Transact - SQL语句组合成一个语句块,并将它们视为一个单元处理。在条件语句和循环等控制流程语句中,当符合特定条件便要执行两个或者多个语句时,就需要使用beginend语句,其语法形式为:
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允许嵌套使用ifelse语句,而且嵌套层数没有限制。
语法:
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 ' 无 '
注意:一定不要把ifexists和聚合函数一起使用,因为聚合函数总是返回数据,即使数据是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语句将导致退出到下一个外层循环。首先运行内层循环结束之后的所有语句,然后下一个外层循环重新开始执行。