先祝各位CSDN的朋友,元宵快乐!元宵快乐!有个关于SQL SERVER触发器的问题。先看下面三个“表”
考试记录表
[test]
cName    姓名nvarchar
sClass   班级nvarchar
nPoints  成绩int
sType    类型nvarchar考试标准表
[Rules]
sClass   班级nvarchar
nPoints  达标成绩int达标学生表
[Good]
cName    姓名nvarchar
sType    类型nvarchar 
问题是这样,当插入一个“考试表test”,用触发器来判断当前记录的分数,是否达到标准[Rules]中对应字段“班级sClass”的达标成绩。
如果超过,则在“达标表[Good]”添加一条同名sName记录,sType字段内容为“合格”。
如果大于及格线两倍,则添加同名sName记录,sType字段内容为“优秀”。
同时修改[test]表中sType的内容。触发用得不多,这次要用到一些判断和条件不太明白。如果能对代码进行一些说明就最好了!我用“可用分”谢谢大家!

解决方案 »

  1.   

    create trigger t_insert
    on test
    for insert
    as
    begin
        insert into good
        select cName ,case when t.npiont between r.npoints and 2*r.npoints then '合格'
                           when t.npiont >= 2*r.npoints then '优秀'
        from rules r,inserted t where t.sclass=r.sclass 
    end  test
      

  2.   


    --大概这样
    --问题是这样,当插入一个“考试表test”,用触发器来判断当前记录的分数,是否达到标准[Rules]中对应字段“班级sClass”的达标成绩。 
    --如果超过,则在“达标表[Good]”添加一条同名sName记录,sType字段内容为“合格”。 
    --如果大于及格线两倍,则添加同名sName记录,sType字段内容为“优秀”。 
    create trigger tr on test
    for insert
    as
    begin
    insert into good
    select i.cName,sType=(case when i.npoints>r.npoints*2 then '优秀' else '合格' end)
    from inserted i ,rules r
    where i.sclass=r.sclass and i.npoints>=r.npoints
    end 
    go--同时修改[test]表中sType的内容最好不要写在触发器里吧
      

  3.   

    补充一下:如果不达标的话,就不要添加记录到[Good]表了。如果一定要在触发器里,实现修改[Test]的sType字段,可以吗---------其实,通过这个例子,我也想学习下触发器的一些逻辑。谢谢大家
      

  4.   


    在'优秀'后面少了个 end
      

  5.   

    To:bancxc调试OK。就差最后想再修改[test]表中 sType 的内容啦。不知有可能用触发器实现吗 
      

  6.   

    我想试着,最后再修改 新插入的test表,得到 “不能修改逻辑表 Inserted” , 不能把最后的结果,再改到刚插入的记录中吗最后能再修改[test]表中sType字段吗