用MSSQL触发器,跨服务器同步表数据

实现目标:从一个服务器对表sys_user_copy1进行增删改查时,另一个服务器上的表要实时更新。

触发器知识恶补:

触发器语句中用两个特殊的表一个是deleted表和inserted。它们是通过触发器操作自动创建驻留在内存中的临时表。

触发器的操作 deleted表和inserted表的数据变化

项目

inserted

deleted

入操作(Insert)

Inserted表有数据

Deleted表无数据

删除操作(Delete)

Inserted表无数据

Deleted表有数据

更新操作(Update)

Inserted表有数据(新数据)

Deleted表有数据(旧数据)

一、创建链接服务器

语法:

exec sp_addlinkedserver '自定义服务器名 ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 ' exec sp_addlinkedsrvlogin '自定义服务器名 ', 'false ',null, '用户名 ', '密码 '

示例:

exec sp_addlinkedserver 'srv10', ' ', 'SQLOLEDB', '192.168.1.10' exec sp_addlinkedsrvlogin 'srv10', 'false ',null, 'sa', '123456'

二、创建触发器 (使用navicat也行,其他客户端也行)

插入

insert into srv10.HiddenDangerInvestigation_SD.dbo.sys_user_copy1 (ID,user_type ,grade,USER_NAME,IS_DELETED,IS_DISABLED,REVISION,CREATED_TIME,UPDATED_TIME) select ID,0,grade,USER_NAME,IS_DELETED,IS_DISABLED,REVISION,CREATED_TIME,UPDATED_TIME from inserted

修改

update srv10.HiddenDangerInvestigation_SD.dbo.sys_user_copy1 set USER_NAME=b.USER_NAME from sys_user_copy1 a join inserted b on a.id=b.id

删除

delete from srv10.HiddenDangerInvestigation_SD.dbo.sys_user_copy1 where id in (select id from deleted)

注意:

如果出现下图弹窗,则表明两台服务器DTC或相关配置有问题

关键配置:那么需要打开 组件服务》我的电脑》DTC》本地DTC

WIN+R打开运行输入:comexp.msc

参见其他博客:

链接服务器 “*****“ 的 OLE DB 访问接口 “SQLNCLI10“ 无法启动分布式事务。_Marcus丶的博客-CSDN博客_链接服务器的oledb访问接口sqlncli10

其他方式也可以,比如定时同步:

sqlserver 实现跨服务器 数据定时同步

sqlserver 实现跨服务器 数据定时同步_zhmch08的博客-CSDN博客_sqlserver异地数据同步

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值