触发器通过连接服务器更新数据
A,B 2个SQL SERVER 2008数据库,分别在不同的服务器上。当A库的TableA 插入一条数据的时候,将B库中TableB 中对应的记录更新状态。
原计划是写一个服务来定时同步,但用户要的紧,就写了一个触发器+链接服务器来实现。中间碰到一些问题这里做一下总结
模拟数据
create database A go use A go CREATE TABLE TableA ( id int, MapId int ) |
实现
exec sp_addlinkedserver 'Server1', '', 'SQLOLEDB', '192.168.50.1'
exec sp_addlinkedsrvlogin 'Server1', 'false', NULL, 'sa', 'mamahao' |
CREATE TRIGGER tg_insert_TableA ON tableA AFTER INSERT AS BEGIN DECLARE @MAPId INT
SELECT @MAPId = MapID FROM INSERTED
UPDATE SERVER1.B.dbo.TableB SET STATE = 1 WHERE MAPID = @MAPId END |
INSERT INTO tableA VALUES (1,1) |
分析
解决
ALTER TRIGGER tg_insert_TableA ON tableA AFTER INSERT AS BEGIN DECLARE @MAPId INT
SELECT @MAPId = MapID FROM INSERTED
COMMIT
UPDATE SERVER1.B.dbo.TableB SET STATE = 1 WHERE MAPID = @MAPId
BEGIN TRAN END |
INSERT INTO tableA VALUES (1, 1)
PRINT '当前事物' + CONVERT(VARCHAR, @@TRANCOUNT) |
而且@@Trancout 在这这个回话中是0值。说明事务都提交了。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步