各位老师好:
     我要对pi表做一个update触发器。触发器如下:
     create trigger piupdate 
     on pi
     for update 
     as 
     update pi set xq_rs=getdate()  from pi a,inserted  b where 
     a.bh=b.bh 
但是这个触发器又触发了一个update触发器,我怕这样一直嵌套触发下去,Sql Server2000
会陷入一个死循环。怎样避免这种情况发生,请指教。

解决方案 »

  1.   

    create trigger piupdate 
    on pi
    for update 
    as 
    if not update(pi)
    begin
        update pi set xq_rs=getdate()  from pi a,inserted  b where a.bh=b.bh 
    end
      

  2.   

    create trigger piupdate on pi
         for update 
     as 
      alter table pi disable trigger piupdate
         update pi set xq_rs=getdate()  from pi a,inserted  b where 
         a.bh=b.bh 
      alter table pi enable trigger piupdate
      

  3.   

    如果用户没有alter表的权限就不行.
      

  4.   

    不要用关闭触发器的方法,在并发情况后果很严重1楼的够了或者考虑改变nested triggers 选项来限制嵌套触发器
      

  5.   

    不论是直接嵌套还是间接的都可以判断ALTER   TRIGGER xxxxxxxx
    ON dbo.MyTable
    After   UPDATE  ,INSERT
    AS
       IF UPDATE (Audit)
    Begin
       declare @TriggerCount int
       SELECT @TriggerCount= trigger_nestlevel( object_ID('要检测的触发器名称) )   if (@TriggerCount>=1)
          return 
       else
          to do something
    end