---即时同步两个表的实例: --测试环境:SQL2000,远程主机名:xz,用户名:sa,密码:无,数据库名:test --创建测试表,不能用标识列做主键,因为不能进行正常更新 --在本机上创建测试表,远程主机上也要做同样的建表操作,只是不写触发器 ifexists (select*from dbo.sysobjects where id =object_id(N'[test]') andOBJECTPROPERTY(id, N'IsUserTable') =1) droptable[test] createtable test(id intnotnullconstraint PK_test primarykey ,name varchar(10)) go --创建同步的触发器 createtrigger t_test on test forinsert,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 --进行分布事务处理,如果表用标识列做主键,用下面的方法 BEGINDISTRIBUTEDTRANSACTION deletefromopenrowset('sqloledb','xz';'sa';'',test.dbo.test) where id in(select id from deleted) insertintoopenrowset('sqloledb','xz';'sa';'',test.dbo.test) select*from inserted committran go --插入数据测试 insertinto test select1,'aa' unionallselect2,'bb' unionallselect3,'c' unionallselect4,'dd' unionallselect5,'ab' unionallselect6,'bc' unionallselect7,'ddd' --删除数据测试 deletefrom test where id in(1,4,6) --更新数据测试 update test set name=name+'_123'where id in(3,5) --显示测试的结果 select*from test a fulljoin openrowset('sqloledb','xz';'sa';'',test.dbo.test) b on a.id=b.id