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

 我来答
大沈他次苹0B
2022-11-12 · TA获得超过7358个赞
知道大有可为答主
回答量:3059
采纳率:100%
帮助的人:182万
展开全部
问题 如何通过触发器实现数据库的即时同步?

   解答 具体的解决方法请参考下文

   即时同步两个表的示例如下:

  

  测试环境如下:SQL Sever 数据库 远程主机名:xz 用户名:sa 密码:无 数据库名:test

  

  创建测试表 请注意不能用标识列做主键 因为不能进行正常的更新

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

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

  drop table [test]

  

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

   name varchar( ))

  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

  mit tran

  go

  

   插入数据测试

  insert into test

  select aa

  union all select bb

  union all select c

  union all select dd

  union all select ab

  union all select bc

  union all select ddd

  

   删除数据测试

  delete from test where id in( )

  

   更新数据测试

  update test set name=name+ _ where id in( )

  

   最后显示测试的结果

  select * from test a full join

lishixinzhi/Article/program/Oracle/201311/17111

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式