用触发器即时同步两个表的实例

原创 2004年09月03日 21:39:00

--数据较少时,可以手工同步,更方便控制

--用触发器即时同步两个表的实例:

--测试环境: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

--以下操作在本机进行
--在本机上建表及做同步处理的工作

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 identity(1,1) 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

备注:收集于邹建的论坛回答问题

MySQL创建触发器实现统一主机下两个数据库的表同步

首先建立要用于测试 数据库 与 表 create database a; create database b; use a create table table1(id int, val int);...
  • u014796999
  • u014796999
  • 2016年07月05日 13:44
  • 2782

MySQL用触发器同步两张表

MySQL用触发器同步两张表 在MySQL环境下面,建立相关触发器,在两个表之间相关sql,希望能帮到大家 1.建表 CREATE TABLE `person` (   `id` int(11) DE...
  • monkey_90ge
  • monkey_90ge
  • 2015年06月03日 15:18
  • 2314

MySQL 触发器例子(两张表同步增加和删除)

原文链接:http://www.cnblogs.com/findumars/archive/2013/05/22/3092036.html 以下两个例子来自: http://www.cnblogs...
  • nimeijian
  • nimeijian
  • 2017年04月13日 14:14
  • 381

MySQL 触发器实现表同步

MySQL 设置trigger,简单入手。
  • suxiaoluhaha
  • suxiaoluhaha
  • 2015年01月16日 23:23
  • 597

SQL Server(2008)中通过触发器进行数据同步的设置说明

今天做了这个的测试,记录下来。希望对有需要的朋友有点帮助。
  • xiaochongzi520
  • xiaochongzi520
  • 2014年01月16日 16:07
  • 1461

oracle 同一个表出现2个用户创建的同名触发器

oracle 同一个表有不同用户创建的同名出发器。expdp时生成的
  • dacong
  • dacong
  • 2015年09月16日 23:11
  • 1613

同一数据库不同用户的两张表双向同步--触发器+包

1.新建package(A用户中) create or replace package pk_check_active is   --标识是否为触发器引发   n number :=0;   --获取...
  • u013062329
  • u013062329
  • 2017年12月27日 09:32
  • 157

Oracle触发器 同一事件激活两个触发器

5.11 同一事件激活两个触发器问题现在需要创建一个触发器,把SYSDATE的值插入LOCATIONS表的HIRE_DATE字段。但是这个表已经有一个BEFORE INSERT触发器,而你又不希望这两...
  • suding3
  • suding3
  • 2016年12月14日 12:16
  • 963

MySQL同SQL Server触发器同步两张表实现方法

以下新增同步为例,更新删除方法一样,都是用一个用户变量标识判断防止触发器递归...
  • roy_88
  • roy_88
  • 2016年08月06日 17:43
  • 1662

mysql——两张表(双向触发器)增、删、更新完美测试通过,互不影响

先建数据库: create database mytest; use mytest; DROP TABLE IF EXISTS `user1`; CREATE TABLE `user1` ( ...
  • u014796999
  • u014796999
  • 2016年07月05日 00:06
  • 2705
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用触发器即时同步两个表的实例
举报原因:
原因补充:

(最多只允许输入30个字)