• 全部
  • 基础类
  • 应用实例
  • 新技术前沿

请问:同一个sql 实例的不同数据库的同名表,如何写触发器 互相同步?而不级连触发?

booksfount 2007-04-10 04:34:03

有两个数据库,名称 分别为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.

现在系统是 不让更新数据。说是超出了范围了。

请问:该如何写这个触发器?谢谢大家指教!

...全文
268 点赞 收藏 3
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
booksfount 2007-04-10
谢谢 gahade(与君共勉)
解决了,真的很感激阿。

哈 。结贴
回复
gahade 2007-04-10
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
回复
CathySun118 2007-04-10
是不是权限的问题
回复
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2007-04-10 04:34
社区公告
暂无公告