首页 / 数据库 / SQLServer / 通过SQL SERVER 触发器实现跨库同步
通过SQL SERVER 触发器实现跨库同步2013-12-09有两个服务器,分别装有两个SQL Server A ,BA,B的表结构a,b 相同A,B分别都会做一些INSERT,UPDATE,DELETE操作,要求AB的数据保持一致(即A新增一条数据,要求B也新增,A更改一条数据,B也更改相应的)是不是可以用触发器来实现例程/*--同步两个数据库的示例有数据srv1.库名..author有字段:id,name,phone,srv2.库名..author有字段:id,name,telphone,adress要求:srv1.库名..author增加记录则srv1.库名..author记录增加srv1.库名..author的phone字段更新,则srv1.库名..author对应字段telphone更新--*/--大致的处理步骤--1.在 srv1 上创建连接服务器,以便在 srv1 中操作 srv2,实现同步exec sp_addlinkedserver "srv2","","SQLOLEDB","srv2的sql实例名或ip"exec sp_addlinkedsrvlogin "srv2","false",null,"用户名","密码"go--2.在 srv1 和 srv2 这两台电脑中,启动 msdtc(分布式事务处理服务),并且设置为自动启动我的电脑--控制面板--管理工具--服务--右键 Distributed Transaction Coordinator--属性--启动--并将启动类型设置为自动启动go--3.实现同步处理--a.在srv1..author中创建触发器,实现数据即时同步--新增同步create trigger tr_insert_author on authorfor insertasset xact_abort oninsert srv2.库名.dbo.author(id,name,telphone)select id,name,telphone from insertedgo--修改同步create trigger tr_update_author on authorfor updateasset xact_abort onupdate b set name=i.name,telphone=i.telphonefrom srv2.库名.dbo.author b,inserted iwhere b.id=i.idgo--删除同步create trigger tr_delete_author on authorfor deleteasset xact_abort ondelete bfrom srv2.库名.dbo.author b,deleted dwhere b.id=d.idgo--3.实现同步处理的方法2,定时同步--在srv1中创建如下的同步处理存储过程create proc p_processas--更新修改过的数据update b set name=i.name,telphone=i.telphonefrom srv2.库名.dbo.author b,author iwhere b.id=i.id and(b.name<>i.name or b.telphone<>i.telphone)--插入新增的数据insert srv2.库名.dbo.author(id,name,telphone)select id,name,telphone from author iwhere not exists(select * from srv2.库名.dbo.author where id=i.id)--删除已经删除的数据(如果需要的话)delete bfrom srv2.库名.dbo.author bwhere not exists(select * from author where id=b.id)go