实现目标:从一个服务器对表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 实现跨服务器 数据定时同步