日期:2014-05-18  浏览次数:20499 次

求一个触发器的编写
成绩表:result_info
列:stu_id,course_no,result

老师要求在成绩表上编写一个触发器,
不能够修改低于60分的学生成绩,否则报错并取消操作

可是我编的触发器在进行批量修改时出错,只有当要修改的不及格成绩在最后一行才生效。比如:
stu_id           course_no         result
001                         1                     80
001                         2                     45
001                         3                     70
我使用:update   result_info   set   result=90   where   stu_id=001
这个语句时触发器就无效,请各位指教~~~

我写的触发器:
if   exit(select   name   from   sysobjects  
                  where   name= 'tr_result '   and   type= 'tr ')
drop   trigger   tr_result
go
create   trigger   tr_result   on   result_info
for   update,insert
as
        declare   @result   float
        select   @result=result   from   deleted
        if   @result <60
              begin
                      raiserror( '禁止修改不及格成绩! ',16,1)
                      rollback   transaction
              end
go




------解决方案--------------------
create trigger tr_result on result_info
for update,insert
as
if exists(select 1 from deleted where result <60)
begin
raiserror( '禁止修改不及格成绩! ',16,1)
rollback transaction
end
go