摘要:遇到一个项目需要保证2个数据库中相同表的数据同步,比如ERP数据库DB1中的user表有增删改时,需要同时更新到门禁系统数据库DB2中的user表中,保持一致性。想到用触发器来解决......
--远程数据需要加链接,目前仅是同一服务器下两个数据库,用不到
--exec sp_addlinkedserver 'DB2','','SQLOLEDB','srv2的sql实例名或ip'
--exec sp_addlinkedsrvlogin 'DB2','false',null,'用户名','密码'
--go
use KXDDB
go
--一个设置返回null的开关标识,一个语法字段可以带双引号的开关标识
--SET ANSI_NULLS ON
--GO
--SET QUOTED_IDENTIFIER ON
--GO
CREATE TRIGGER User_insert
ON User
AFTER INSERT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
SET xact_abort on;
-- Insert statements for trigger here
INSERT INTO
DB2.dbo.User(User_ID,User_CODE,User_NAME)
SELECT User_ID,User_CODE,User_NAME
FROM INSERTED
END
GO
CREATE TRIGGER User_update
ON User
AFTER UPDATE
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
set xact_abort on;
-- Insert statements for trigger here
UPDATE r
SET User_ID=i.User_ID,User_CODE=i.User_CODE,User_NAME=i.User_NAME
FROM DB2.dbo.User as r,inserted as i
WHERE r.User_ID=i.User_ID
END
GO
CREATE TRIGGER User_delete
ON User
AFTER DELETE
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
set xact_abort on;
-- Insert statements for trigger here
Delete r
FROM DB2.dbo.User as r,deleted as d
WHERE r.User_ID=d.User_ID
END
GO
参考原文:https://www.cnblogs.com/syncnavigator/p/10193516.html