有两个数据库,名称 分别为adb,bdb.  都存在 表  xs_area表。
结构如下:AreaCode  char(10)
AreaName nvarchar(40)
写了update触发器。 可是 因为 两个库的表都写了update触发器。  在更新一个的时候,触发了另外一个。第二个触发后,又更新了第一个。 请问详细应该如何写。
目前的写法如下:总是有问题。
在adb 上。if (  update(AreaName) and  not update(AreaCode)  )
begin  update a set a.areaname  =  i.areaname
         from bdb.dbo.xs_area a,inserted i
where a.AreaCode= i.AreaCode and a.AreaName<> i.AreaName 
  end在bdb上。if (update(AreaName)  and  not update(AreaCode)  )
begin
update a set a.areaname  =  i.areaname
        from adb.dbo.xs_area a,inserted i 
where a.AreaCode= i.AreaCode and a.AreaName<> i.AreaName 
end 
-----------
已经都加了  and a.AreaName<> i.AreaName  条件了,就是 防止 第二次又调用触发器。
两个触发器用的都是   after update.现在系统是 不让更新数据。说是超出了范围了。请问:该如何写这个触发器?谢谢大家指教!

解决方案 »

  1.   

    if (  update(AreaName) and  not update(AreaCode) and exists(select 1 from inserted i,deleted d where i.AreaCode=d.AreaCode and i.AreaName<>d.AreaName)  )
    begin  update a set a.areaname  =  i.areaname
             from bdb.dbo.xs_area a,inserted i,deleted d
    where a.AreaCode= i.AreaCode and i.AreaCode=d.AreaCode and  d.AreaName<> i.AreaName 
      end在bdb上。if (update(AreaName)  and  not update(AreaCode)  and exists(select 1 from inserted i,deleted d where i.AreaCode=d.AreaCode and i.AreaName<>d.AreaName) )
    begin
    update a set a.areaname  =  i.areaname
            from adb.dbo.xs_area a,inserted i 
    where a.AreaCode= i.AreaCode and i.AreaCode=d.AreaCode and  d.AreaName<> i.AreaName 
    end
      

  2.   

    谢谢  gahade(与君共勉) 
    解决了,真的很感激阿。哈 。结贴