循环控制

WHELI语句根据条件表达式设置Transact-SQL语句或yu'j语句块重复执行的次数。如果所设置的条件为真(True),在WHILE循环体内的Transact-SQLyu'j语句会一直重复执行,直到条件为假(False)为止。在WHILE循环体内Transact-SQL语句的执行可以使用使用BREAK与CONTINUE关键词来控制。

WHILE循环语句的语法格式如下:

WHILE boolean_epression

{sql_statement|statement_block}

[BREAK]

[sql_statement|statement_block]

[CONTINUE]

ge'x各选项的含义如下:

(1)boolean_epression返回值为TRUE或FALSE。如果g该表达式含有SELECT语句,必须用圆括号将SELECT语句括起来。

(2){sql_statement|statement_block}为Transact-SQL语句或语句块。语句块din定义应使用控制流关键字BEGIN和END。

(3)BREAK导致从最内层的WHILExu循环中退出。将执行出现在END关键字ho后面的任何语句,END关键字为循环结束标记。

(4)CONTINUE使WHILE循环重新开始执行,忽略CONTINUE关键字后的任何语句。

在WHILE循环中,zhi只要boolean_expression的条件为True,就会重复执行循环体内语句或语句块

举例:将goods表中库存数最大的商品每次订购两件,计算需要多少次这样的订购才能使库存数不够一次订购。

DECLARE @count int,@maxstockid char(6),@maxstock float

set @count=0

set @maxstock=(SELECT max(stock_quantity) from goods)

set @maxstockid=(SELECT goods_id FROM goods  where stock_quantity=@maxstock)

SELECT @maxstockid,@maxstock

WHILE(@maxstock>(SELECT order_quantity FROM goods WHERE goods_id=@maxstockid))

BEGIN 

UPDATE goods

SET order_quantity=order_quantity+2

WHERE goods_id=@maxstockid

set @count=@count+1

END

SELECT @count

运行结果如下:

8

本例中,@count变量存储ding订购次数,初始化为0;@maxstock为最大库存数,@maxstockid为最大库存数所在记录的商品编码,使用SELECT语句赋值。WHILE的循环条件是判断编号为@maxstockid的商品的的订购数order_quantity是否小于@maxstock,是则在循环体中geng更新order_quantity,使之每次循环加数值2,并且@count加1,表示进行一次订购;否则退出xu循环。循环体是是由BEGIN..........END定义的语句块。

可以使用BREAK或CONTINUE语句控制WHILExun循环体内语句的zhi'执行。BREAK语句让chen程序跳出循环,CONTINUE语句让程序跳过CONTINUE命令之后的语句,回到WHILE循环的第一行命令,重新开始循环。

举例:

对于goods表,如果平均库存小于12,WHILE循环就将各记录库存增加5%,再判断最高库存是否少于或等于25,是则WHILE循环重新启动并再次将各记录库存增加5%。当循环不断地将库存增加直到最高库存超过25时,然后退出WHILE循环。在WHILE中使用BREAK或CONTINUEkong控制循环体的执行。

/*执行循环,直到库存平均值超过12*/

WHILE(SELECT avg(stock_quantity) FROM goods)<12

BEGIN

UPDATE goods

SET stock_quantity=stock_quantity*1.05

SELECT max(stock_quantity) FROM  goods

/*如果最大库存值超过25,则用BREAK退出WHILE循环,否则继续循环*/

IF (SELECT max(stock_quantity) FROM goods)>25

BEGIN

PRINT'库存太多了'

BREAK

END 

ELSE

CONTINUE

END

如果程序嵌套了两个或多个WHILE循环,内层的BREAK将导致退出到下一个外层循环。运行完内层循环之后的所有语句后,重新执行下一个外层循环。

举例:

计算s=1!+2!+........+10!

DECLARE @s int ,@n int ,@t int ,@c int 

/*@s存储阶乘和,@n为外层循环控制变量,@c为内层循环控制变量,@t为@c的阶乘值*/

SET @s=0

SET @n=1

WHILE @n<=10

BEGIN

SET @c=1

SET @t=1

WHILE @c<=10

BEGIN

SET @t=@t*@c

SET @c=@c+1

END 

SET @S=@s+@t

SET @n=@n+1

END 

SELECT @s,@c

本例中,设计了两层WHILE循环,内层WHILE计算@n(@n取直为1~10)的阶乘,外层WHILE将每次内层WHILE计算出来@n的阶乘累加到@s变量,同时控制内层@n的值,每循环一次,使@n的值加1。这里@n的作用包括两个方面:一方面时作为外层循环次数的控制变量,当表达式为@n<=10成立时,即执行循环,使循环次数控制在10次,当条件不成立时,退出循环;另一方面,@n作为内层循环的终值,用于计算@n的阶乘。外层WHILE每循环一次,内层WHILE循环@n次。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值