版本及环境为:Microsoft SQL Server 2008 (SP3) - 10.0.5500.0 (X64)
Enterprise Edition (64-bit) on Windows NT 6.0 <X64> (Build 6001: Service Pack 1)
要求:跨库将一个A库中A1,A2,A3这三个表关联的查询结果集实时更新到B库中B1中,且当A库中的这三个表有增删改时,B库中的B1能同步变更数据。
A库---------
A1表(人员表):
RYID(人员ID) SFZH(身份证) XM(姓名) BZ(班组信息) CJ(车间信息)
1 1121 张三 1 1
2 1122 李四 2 2
A2表(班组表):
BZID(班组ID) BZMC(班组名称)
1 班组1
2 班组2
A3表(车间表)
CJID(车间ID) CJMC(车间名称)
1 铜芯车间
2 铝杆车间
B库---------------------
B1表(人员及其班组、车间信息表):
RYID(人员ID) SFZH(身份证) XM(姓名) BZMC(班组名称) CJMC(车间名称)
只是单纯新增插入的话我用的存储过程,并且把它挂在B库的定时作业中,能够实现定时的新增,但现在需要实时有修改或者删除应该如何实现?触发器的话只用过作用在两个表上
------解决思路----------------------
在A数据库的三个表上分别写触发器, 通过触发器来更新B数据库的表
------解决思路----------------------
这个也是根据你的需求来定的,所以,你看看 是否真的需要实时,因为很多时候,我们很难在技术上做改进,所以想想 是否能从需求上做改进。
------解决思路----------------------
MERGE b.b1 AS d -- 目标
USING a.v AS AS s -- 源(假定视图名叫 v)
ON s.ryid = d.ryid
WHEN NOT MATCHED BY TARGET THEN -- 目标没有,插入
INSERT( ryid,sfzh,xm,bzmc,cjmc)
VALUES(s.ryid,s.sfzh,s.xm,s.bzmc,cjmc)
WHEN NOT MATCHED BY SOURCE THEN -- 源没有,删除
DELETE
WHEN MATCHED THEN -- 存在相同ryid,更新
UPDATE SET d.sfzh = s.sfzh,
d.xm = s.xm,
d.bzmc = s.bzmc,
d.cjmc = s.cjmc