天天看点

通过触发器实现数据库的即时同步

<a href="http://www.cnblogs.com/ghd258/archive/2005/10/24/260783.html"></a>

通过触发器实现数据库的即时同步

---即时同步两个表的实例:

通过触发器实现数据库的即时同步

--测试环境:SQL2000,远程主机名:xz,用户名:sa,密码:无,数据库名:test

通过触发器实现数据库的即时同步
通过触发器实现数据库的即时同步

--创建测试表,不能用标识列做主键,因为不能进行正常更新

通过触发器实现数据库的即时同步

--在本机上创建测试表,远程主机上也要做同样的建表操作,只是不写触发器

通过触发器实现数据库的即时同步

if exists (select * from dbo.sysobjects where id = object_id(N'[test]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)

通过触发器实现数据库的即时同步

drop table [test]

通过触发器实现数据库的即时同步
通过触发器实现数据库的即时同步

create table test(id int not null constraint PK_test primary key

通过触发器实现数据库的即时同步

,name varchar(10))

通过触发器实现数据库的即时同步

go

通过触发器实现数据库的即时同步
通过触发器实现数据库的即时同步

--创建同步的触发器

通过触发器实现数据库的即时同步

create trigger t_test on test

通过触发器实现数据库的即时同步

for insert,update,delete

通过触发器实现数据库的即时同步

as

通过触发器实现数据库的即时同步

set XACT_ABORT on

通过触发器实现数据库的即时同步

--启动远程服务器的MSDTC服务

通过触发器实现数据库的即时同步

exec master..xp_cmdshell 'isql /S"xz" /U"sa" /P"" /q"exec master..xp_cmdshell ''net start msdtc'',no_output"',no_output

通过触发器实现数据库的即时同步
通过触发器实现数据库的即时同步

--启动本机的MSDTC服务

通过触发器实现数据库的即时同步

exec master..xp_cmdshell 'net start msdtc',no_output

通过触发器实现数据库的即时同步
通过触发器实现数据库的即时同步

--进行分布事务处理,如果表用标识列做主键,用下面的方法

通过触发器实现数据库的即时同步

BEGIN DISTRIBUTED TRANSACTION

通过触发器实现数据库的即时同步

delete from openrowset('sqloledb','xz';'sa';'',test.dbo.test)

通过触发器实现数据库的即时同步

where id in(select id from deleted)

通过触发器实现数据库的即时同步

insert into openrowset('sqloledb','xz';'sa';'',test.dbo.test)

通过触发器实现数据库的即时同步

select * from inserted

通过触发器实现数据库的即时同步

commit tran

通过触发器实现数据库的即时同步
通过触发器实现数据库的即时同步
通过触发器实现数据库的即时同步

--插入数据测试

通过触发器实现数据库的即时同步

insert into test

通过触发器实现数据库的即时同步

select 1,'aa'

通过触发器实现数据库的即时同步

union all select 2,'bb'

通过触发器实现数据库的即时同步

union all select 3,'c'

通过触发器实现数据库的即时同步

union all select 4,'dd'

通过触发器实现数据库的即时同步

union all select 5,'ab'

通过触发器实现数据库的即时同步

union all select 6,'bc'

通过触发器实现数据库的即时同步

union all select 7,'ddd'

通过触发器实现数据库的即时同步
通过触发器实现数据库的即时同步

--删除数据测试

通过触发器实现数据库的即时同步

delete from test where id in(1,4,6)

通过触发器实现数据库的即时同步
通过触发器实现数据库的即时同步

--更新数据测试

通过触发器实现数据库的即时同步

update test set name=name+'_123' where id in(3,5)

通过触发器实现数据库的即时同步
通过触发器实现数据库的即时同步

--显示测试的结果

通过触发器实现数据库的即时同步

select * from test a full join

通过触发器实现数据库的即时同步

openrowset('sqloledb','xz';'sa';'',test.dbo.test) b on a.id=b.id

本文转自高海东博客园博客,原文链接http://www.cnblogs.com/ghd258/archive/2005/10/24/260783.html,如需转载请自行联系原作者