当前位置: 代码迷 >> Sql Server >> 跨库将一个库中几个表关联的查询结果集实时更新到另一个库中,该如何解决
  详细解决方案

跨库将一个库中几个表关联的查询结果集实时更新到另一个库中,该如何解决

热度:103   发布时间:2016-04-24 08:58:22.0
跨库将一个库中几个表关联的查询结果集实时更新到另一个库中
版本及环境为: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
  相关解决方案