日期:2014-05-18  浏览次数:20760 次

高分"如何做到两个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 行)
*/