我有一个成绩表Score,有字段yuwen,shuxue,yingyu,Zongfen 
其中Zongfen是yuwen,shuxue,yingyu 三个字段之和 
现在我的意思是修改了yuwen,shuxue,yingyu 任何一个字段的数据就利用触发器自动更新Zongfen的值 
我写了如下的触发器 
CREATE TRIGGER [TRIGGERStudentScore] ON [dbo].[Score]  
FOR  UPDATE  AS 
  if @@rowcount=0 return 
update StudentTestScore set Zongfen=yuwen+shuxue+yingyu 
问题是此触发器可以工作,但是当多数据更新的时候速度奇慢! 
请各位高手指点,究竟是哪里出了问题? 

解决方案 »

  1.   

    CREATE TRIGGER [TRIGGERStudentScore] ON [dbo].[Score] FOR UPDATE  
    AS 
        update StudentTestScore set Zongfen = n.yuwen + n.shuxue + n.yingyu 
        from StudentTestScore m , inserted n where m.关键字 = n.关键字 
    go 关键字:如姓名或学号.
      

  2.   

    http://topic.csdn.net/u/20091025/00/8f48074c-9a73-41d2-a838-70f96226849c.html?62302
      

  3.   

    楼主的写法会造成死锁的。
    要判断被update的是不是要检测的地方。不然整个table的任何一个field被update就会触发。
      

  4.   

    CREATE TRIGGER [TRIGGERStudentScore] ON [dbo].[Score]  
    FOR  UPDATE  AS 
    begin
        if ( UPDATE (yuwen) OR UPDATE (shuxue) OR UPDATE (yingyu ))        update a set Zongfen=yuwen+shuxue+yingyu 
            from StudentTestScore a
            where exists(select 1 from inserted where a.关联 = 关联)
    end
    go