A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 中山郎 中级黑马   /  2012-10-10 19:41  /  2179 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

 IF…ELSE语句
在流程控制语句之中,首先我们应当认识的是语句块,一个语句块是以BEGIN开始,以END语句作为终止,作为一个完全独立的逻辑单元存在于流程控制语句之中,如下所示:
BEGIN
{ sql_statement | statement_block }
END
而IFELSE语句是条件判断语句,其中,ELSE子句是可选的,最简单的IF语句没有ELSE子句部分。IFELSE语句用来判断当某一条件成立时执行某段程序,条件不成立时执行另一段程序。SQL Server允许嵌套使用IFELSE语句,而且嵌套层数没有限制。IFELSE语句的语法形式为:
IF Boolean_expression
{ sql_statement | statement_block }
[ ELSE
{ sql_statement | statement_block } ]
实验: IFELSE语句实验
--例1:如果员工数据表中有人在办公室工作,则显示这些人名单,否则告知没有人在办公室。
Use sample
Go
--声明用于发布消息的变量
Declare @message varchar(200)
--判断是否在办公室工作
If exist(Select * from 员工数据表 where 所属部门=办公室’)
--如果有,则列出姓名
Begin
set @message=下列人员在办公室:’
print @message
select 姓名 from 员工数据表 where 所属部门=办公室’
End
--否则,输出没有人的在工作的消息
Else
Begin
Set @message=抱歉,没有人在办公室’
Print @message
End
Go
--注意:begin 和end分别表示语句块的开始和结束,而且他们必须成对使用。
--例子2:查询如果有工资超过5000元输出一个消息,否则输出另一个消息
Use sample
Go
Declare @message varchar(200)
--判断是否存在工资超过5000的员工
If exist(Select 姓名,工资 from 员工数据表 where 工资>5000)
Begin
Print 有员工工资超过5000元’
End
--否则,输出没有工资以上的员工
Else
Begin
Set @message=抱歉,并没有员工的工资在5000元以上’
Print message
End
--例子3:下面的例子中,如果员工平均薪水大于3000元,则输出一个消息,否则输出另一个消息
If (select avg(工资) from 员工数据表)>3000
print 我们要求提高工资水平!’
Else
print 工资水平较为合理!’
 WHILE…CONTINUE…BREAK语句
WHILECONTINUEBREAK语句用于设置重复执行SQL语句或语句块的条件。只要指定的条件为真,就重复执行语句。其中,CONTINUE语句可以使程序跳过CONTINUE语句后面的语句,回到WHILE循环的第一行命令。BREAK语句则使程序完全跳出循环,结束WHILE语句的执行,其语法形式为:
WHILE Boolean_expression
{ sql_statement | statement_block }
[ BREAK ]
{ sql_statement | statement_block }
[ CONTINUE ]
实验: WHILECONTINUEBREAK语句实验
--例1、下面的这个例子将判断如果员工平均薪水少于3000元,则循环每次使得每个员工工资增加5元,直到所有的员工的平均工资都是大于3000元或者有的员工的工资超过了10000元为止。
Use sample
Go
--根据是否存在员工的平均工资少于3000而确定循环是否继续执行
While (select avg(工资) from 员工数据表)<3000
--循环开始
begin
Update 员工数据表 Set 工资=工资+5
--如果有的员工的工资已经超过了10000元,则跳出循环
print '没有的员工的工资已经超过了10000元,继续循环'
If (select max(工资) from 员工数据表)>10000
Break
else
continue
end
--循环结束
print '有的员工的工资已经超过了10000元,停止循环'
 waitfor语句
WAITFOR语句用于暂时停止执行SQL语句、语句块或者存储过程等,直到所设定的时间已过或者所设定的时间已到才继续执行。WAITFOR语句的语法形式为:
WAITFOR { DELAY 'time' | TIME 'time' }
其中,DELAY用于指定时间间隔,TIME用于指定某一时刻,其数据类型为datetime,格式为‘hh:mm:ss
实验: waitfor语句实验
--例1:
Use sample
Go
--指定在执行select语句之前需要等待3秒
Waitfor delay 00:00:03
--执行查询
select 姓名,性别 from 员工数据表 where 所属部门=项目部’
 GOTO语句
GOTO语句可以使程序直接跳到指定的标有标识符的位置处继续执行,而位于GOTO语句和标识符之间的程序将不会被执行。GOTO语句和标识符可以用在语句块、批处理和存储过程中,标识符可以为数字与字符的组合,但必须以“: 结尾。如:‘a1: 。在GOTO语句行,标识符后面不用跟“: 。GOTO语句的语法形式为:
GOTO label(标签名称)
……
label:
实验: GOTO语句实验
--例1:利用GOTO语句求出从1加到5的总和。程序清单如下:
declare @sum int, @count int
select @sum=0, @count=1
label_1:
select @sum=@sum+@count
select @count=@count+1
if @count<=5
goto label_1
select @count @sum
--注意:
人们认为GOTO语句是影响可读性的严重因素,在使用的时候尽可能避免使用GOTO语句,因为过多的GOTO语句可能会造成T-SQL的逻辑混乱而难以理解。另外,标签仅仅标示了跳转的目标,它并不隔离其前后的语句。只要标签前面的语句本身不是流程控制语句,标签前后的语句将按照顺序正常执行,就如同没有使用标签一样。

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

1 个回复

倒序浏览
值得学习ing!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马