sql中的while 循环语句

今天看了书中说的while 的示例程序,发现这个示例程序,存在不小的漏洞


examno      stuno      writtenexam labexam
----------- ---------- ----------- -------
e2005070001 s25301     94          87
e2005070002 s25303     86          46
e2005070004 s25305     62          54
e2005070006 s25307     82          88
e2005070008 s25308     57          57

以下是本书的讲解:

问题:本次考试成绩不理想,假定要提分,确保每人笔试都通过。提分规则很简单,先每人都加2分,看是否都通过,如果没有全部通过,继续加分,再看是否全部通过,如此反复,直到所有的人都通过为止。

分析:第一步:统计没有通过的人数(<60)
            第二步:如果有人没通过,加分
            第三步:循环判断
代码:

select * from stumarks
declare @n int
  while(0=0)
     begin
 select @n=count(*) from stumarks where writtenexam<60
 if @n>0
        update stumarks set writtenexam=writtenexam+2
 else
         break
     end
print ('加分后的成绩为')
select * from stumarks

按照它的这个讲解,一点问题也没有,可是,当把数据稍微改动一下的时候,问题就来了:

如下:

examno      stuno      writtenexam labexam
----------- ---------- ----------- -------
e2005070001 s25301     94          87
e2005070002 s25303     86          46
e2005070004 s25305     62          54
e2005070006 s25307     82          88
e2005070008 s25308     47          57

发现了吧?我把 57 改成 47
由于表,刚开始在设计的时候,考虑到分数的范围问题,便设置了检查约束:分数在0-100之间
可以想象:如果没有这个约束,程序肯定能运行,但结果呢:

examno      stuno      writtenexam labexam
----------- ---------- ----------- -------
e2005070001 s25301     108          87
e2005070002 s25303     100          46
e2005070004 s25305     76          54
e2005070006 s25307     96          88
e2005070008 s25308     61         57

哈哈,分数超100啦!!

现在有了这个约束:程序便成了死循环

晕死!!

那该怎么解决这个问题呢?

转载于:https://www.cnblogs.com/sophia0405/archive/2007/09/23/903575.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值