用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异地数据同步


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

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部