--
-即时同步两个表的实例:
--
测试环境: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
go
--
插入数据测试
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,如需转载请自行联系原作者