我有表A和B
A有触发器,当A的字段a1更新的时候,更新B的b1
B有触发器,当B的字段把b2更新的时候,更新A的a2请问触发器怎么写,我写了触发器,但是提示嵌套超过限制32.就是说触发器进入了循环.A的触发器出发了B的触发器,B的触发器出发了A的.怎么样才能让触发器在某个特定字段更新的时候才出发??
谢谢

解决方案 »

  1.   

    if update(a1)
    begin
      更新b1的语句
    end在B表的触发器加上个判断
    if update(b2)
    begin
      更新a2的语句
    end
      

  2.   

    如果不加上更新哪个字段的判断,就会造成死循环,A更新B,B又更新A
      

  3.   

    我已经用了,但是还是不行.只要禁用其中一个触发器,另外一个就正常.
    CREATE TRIGGER edit
       ON  dbo.jxkh_dw_month
       AFTER UPDATE
    as
    if update(tj)
    declare @sj smalldatetime,@tj smallint,@dwbh numeric
    begin
    select @sj=sj from inserted
    select @dwbh=dwbh from inserted
    select @tj=tj from inserted
    update jxkh_mx set edit=@tj where dwbh=@dwbh and sj=@sj 
    end     
      

  4.   

    CREATE TRIGGER [dbo].[updatemx] ON [dbo].[jxkh_mx] 
    for update
    AS
    if update(fs)
    declare @fs2 float,@fs float,@dwbh numeric,@sj varchar(20)
    begin
    select @fs=fs from inserted
    select @dwbh=dwbh from inserted
    select @sj=sj from inserted
    select @fs2=fs from deleted
    update jxkh_dw_month set fs=fs+@fs-@fs2 where dwbh=@dwbh and sj=@sj
    end
      

  5.   

    CREATE TRIGGER edit
       ON  dbo.jxkh_dw_month
       AFTER UPDATE
    as
    if update(tj)begin
    declare @sj smalldatetime,@tj smallint,@dwbh numeric    --加在begin--and中间
    select @sj=sj from inserted
    select @dwbh=dwbh from inserted
    select @tj=tj from inserted
    update jxkh_mx set edit=@tj where dwbh=@dwbh and sj=@sj 
    end
      

  6.   

    GOOD,谢谢了.原来BEGIN前的都是无论如何会执行的?
      

  7.   

    if update(tj)条件符合的话会执行到后面的语句,如果没有又begin end括起来,就都会执行.
      

  8.   

    2个表 TA,TA1 都有2个字段 ID ,NAMECODE:
    CREATE TRIGGER UPDATE_Ta
    ON Ta
    FOR UPDATE
    AS
      IF UPDATE(ID)
    BEGIN
       UPDATE Ta1 SET ID=i.ID 
       FROM Ta1 t1,INSERTED i,DELETED d
       WHERE t1.ID=d.ID 
    END
    GOCREATE TRIGGER UPDATE_Ta1
    ON Ta1
    FOR UPDATE
    AS
      IF UPDATE(NAME)
    BEGIN
       UPDATE Ta SET NAME=i.NAME 
       FROM Ta t,INSERTED i,DELETED d
       WHERE t.NAME=d.NAME 
    END
    GO