用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异地数据同步
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
