高分"如何做到两个sql数据库双向实时更新
有两个异地数据库sqlserver2000 表结构也一样,都有静态ip,可互相访问,
如何做个数据库能双向实时更新,而保持数据一致性
比如数据库a ,如果有更新了,马上也能更新到数据库b, 如果数据库b有更新,同样也及时更形到a,
我想的办法是两个数据库相互订阅发布,但是不知道会不会出现死循环的情况.就a更新了发布到b,b发现自己更新了又发布到a,不知道是否会这样死循环~~
等待高手回答,或者还又什么好的办法.谢谢了~
------解决方案----------------------字段替换为你实际的主键
CREATE TRIGGER [bb] ON [dbo].[testb]
FOR INSERT
AS SET XACT_ABORT ON
insert into testa(message)
select * from inserted
where 字段 not in (select 字段 from testa) --加控制,只插入不存在.这样由b插入过来触发的时候就不会再插入到b中了.
SET XACT_ABORT OFF
CREATE TRIGGER [aa] ON [dbo].[testa]
FOR INSERT
AS SET XACT_ABORT ON
insert into testb(message)
select * from inserted
where 字段 not in (select 字段 from testb) --加控制,只插入不存在的
SET XACT_ABORT OFF
如果不加控制是会造成死循环,但如果写正确了是完全可以解决此问题的.
------解决方案--------------------drop table testa,testb
go
create table testa(mid int identity(1,1),message varchar(20))
create table testb(mid int identity(1,1),message varchar(20))
CREATE TRIGGER [aa] ON dbo.testa
FOR INSERT
AS SET XACT_ABORT ON
set IDENTITY_INSERT dbo.testb on
insert into testb(message,mid)
select message,mid from inserted
where mid not in (select mid from testb)
set IDENTITY_INSERT dbo.testb off
insert into testa
select '111 '
select * from testa
select * from testb
/*
mid message
----------- --------------------
1 111
(所影响的行数为 1 行)
mid message
----------- --------------------
1 111
(所影响的行数为 1 行)
*/