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

原创 2003年12月29日 17:29: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

--创建同步的触发器
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


 

两个数据库表数据实时同步(sql2008 触发器)

/****** Object:  Trigger [dbo].[TR_C0T14]    Script Date: 11/01/2011 13:21:04 ******/ SET ANSI_NULL...
  • leamonjxl
  • leamonjxl
  • 2011年11月01日 13:41
  • 5560

表同步更新的问题的触发器(SQLSERVER)

sql server 2000 触发器,表同步更新的问题   有三个表,A ,B,C  A、B表中含有: A1,B1,C1 三个字段,  C 表中存放A、B表中的A1、B1、C1 的集合,  字段类型...
  • meteorlWJ
  • meteorlWJ
  • 2007年12月21日 01:10
  • 962

MySQL 触发器实现表同步

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

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

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

用触发器让sqlserver和mysql同步

任务:sqlsever中有表A,MySql中有表B。表A和表B结构一样但不在同一台机器上。要求实现当A中的数据有增删改操作时,在B中进行同样的操作。 方案一(已实现):每天定时删除B表再把A表全部复制...
  • bailin710258
  • bailin710258
  • 2013年10月10日 13:03
  • 2767

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

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

MySQL用触发器同步两张表

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

SQLServer——触发器调用外部程序实现数据同步

SqlServer调用外部程序实现数据同步 首先创建两个数据库:SyncA是数据源,SyncB是对SyncA进行同步的数据库。 在SyncA和SyncB中分别创建Source表和Tar...
  • Shiyaru1314
  • Shiyaru1314
  • 2016年09月19日 09:14
  • 3484

Mysql中的触发器(库存、用户订单中用到)

什么是触发器? 触发器是数据库的一个程序,他是用来监听着数据表的某个行为,一旦数据表的这个行为发生了,马上执行相应的sql语句 触发器的语法结构: create trigger 触发器的名称触...
  • zsj523
  • zsj523
  • 2013年04月17日 21:34
  • 1423

Sqlserver数据库 通过表触发器 实时通知应用程序

/* Sqlserver数据库开始相关服务 以下示例显示了如何查看 OLE Automation Procedures 的当前设置。0未启用 */ EXEC sp_configure 'Ole Aut...
  • smartsmile2012
  • smartsmile2012
  • 2016年12月17日 10:04
  • 1517
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:通过触发器实现数据库的即时同步
举报原因:
原因补充:

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