| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 817 人关注过本帖
标题:SQL2000中触发器出错
只看楼主 加入收藏
tonlin
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2009-10-14
结帖率:69.23%
收藏
 问题点数:0 回复次数:2 
SQL2000中触发器出错
/*创建一个作用在P表上的的触发器P_Ins,
确保用户在插入或更新数据时所提供的WEIGHT值是非负和非零的,
否则给出错误提示并回滚此操作。请测试该触发器。测试方法自定*/
P表为零件表 其中weight列为零件重量不允许为0或者负数
程序代码:
--create trigger P_Ins
alter trigger P_Ins
on p
for insert,update
as
declare @weight int
select @weight=weight from inserted ------------此句如果在SQL2000中如果运行UPDATE P SET WEIGHT=WEIGHT-15(改所有记录此时某些记录为负应该不允许修改)系统允许修改在SQL2008中则不允许修改
--SET  @weight=(SELECT MIN(weight)from inserted) ----------------此句是我为了在SQL2000防止出现以上漏洞做的修改
if(@weight<=[color=#800000; font-weight: bold][color=#800000; font-weight: bold]0[/color][/color]begin
  raiserror('插入出错,weight值小于或等于0',[color=#800000; font-weight: bold][color=#800000; font-weight: bold]16[/color][/color],[color=#800000; font-weight: bold][color=#800000; font-weight: bold]1[/color][/color])
  ROLLBACK TRANSACTION

 end
go

/*测试实例*/
/*往P表插入一个零件重量小于0的记录*/
insert into p(PNO,PNAME,COLOR,WEIGHT) values('P7','轮','红',-5);
/*将P标所有记录重量更新为-7*/
update p set weight=-7 --where pno='p6'
/*将P表所有记录重量减15*/
UPDATE P SET WEIGHT=WEIGHT-15
我想知道为什么在SQL2000允许修改 我只有5分了 希望好心人回答下谢谢

[ 本帖最后由 tonlin 于 2010-6-2 23:12 编辑 ]
搜索更多相关主题的帖子: 触发器 出错 
2010-06-02 23:04
球球
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:1146
专家分:265
注 册:2005-11-28
收藏
得分:0 
select @weight=MIN(weight) from inserted ------------ 此句如果在SQL2000中如果运行UPDATE P SET WEIGHT=WEIGHT-15(改所有记录此时某些记录为负应该不允许修改)系统允许修改在SQL2008中则不允许修改
--SET  @weight=(SELECT MIN(weight)from inserted) ----------------此句是我为了在SQL2000防止出现以上漏洞做的修改

没看到你的
BEGIN TRAN


[ 本帖最后由 球球 于 2010-6-24 19:26 编辑 ]

好累
2010-06-24 16:24
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:0 
未在2008下测试,但在2000和2005中的确如你所说,我想这可能跟select @weight=weight from inserted 这一句的执行有关:在2000或2005中返回的是第一个weight的值。你可以在2008中测试一下该语句的执行情况。我想你的“SET  @weight=(SELECT MIN(weight)from inserted)”这种方法是可行的。它可以突破版本的限制

★★★★★为人民服务★★★★★
2010-06-24 18:25
快速回复:SQL2000中触发器出错
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018783 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved