如何利用触发器实现两个数据库间的同步

数据库
触发器是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作时就会激活它执行。下文中为大家介绍如何利用触发器实现两个数据库间的同步。

若对于同一数据库实例中的两个数据库进行同步则直接对数据库表创建Trigger。

SQL Server 2005的联机帮助:

Trigger on an INSERT, UPDATE, or DELETE statement to a table or view (DML Trigger)

CREATE TRIGGER [ schema_name . ]trigger_name

ON { table | view }

[ WITH [ ,...n ] ]

{ FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] }

[ WITH APPEND ]

[ NOT FOR REPLICATION ]

AS { sql_statement [ ; ] [ ...n ] | EXTERNAL NAME }

::= [ ENCRYPTION ] [ EXECUTE AS Clause ]

::= assembly_name.class_name.method_name

以下是一个例子

set ANSI_NULLS ON

set QUOTED_IDENTIFIER ON

go


-- Create date: 2007-12-24

-- Description:

CREATE TRIGGER [Trigger_Add_Carduser]

ON [dbo].[carduser]

AFTER INSERT

AS

BEGIN

-- SET NOCOUNT ON added to prevent extra result sets from

-- interfering with SELECT statements.

SET NOCOUNT ON;

set insert ParkFee.dbo.card_user(card_user_id,card_user_name,sex)

select card_user_id,card_user_name,sex from inserted

END

说明:

上例实现了为当前数据库中表carduser创建触发器当插入数据时,同步向ParkFee数据库表dbo.card_user插入数据,从而达到同步插入。类同,可将insert语句改为update,delete。

注意:

若想利用此方法达到反向同步则可能出现问题,比如想在parkfee数据库有新数据插入时让当前数据库也同时插入一条记录,建立一个触发器,则形成了一个循环触发,当插入数据时会报大于***递归次数错。因此因避免这样的触发循环,若要达到类似效果还须想别的方法。(待续)

补充:

若两个库处于不同的数据库服务器则应先进行以下操作:

在 server1 上创建连接服务器,以便在 server1 中操作 server2,实现同步

exec sp_addlinkedserver 'server2','','SQLOLEDB','server2的数据库实例名或ip'

exec sp_addlinkedsrvlogin 'server2','false',null,'用户名','密码'

go

【编辑推荐】

  1. 如何保存数据库连接参数代码及步骤详解
  2. 讲解SQL Server数据库触发器的安全隐患
  3. 学习基于SQL数据库的算法
责任编辑:迎迎 来源: 赛迪网
相关推荐

2011-08-10 16:46:01

DB2数据库触发器

2011-03-03 14:04:48

Oracle数据库触发器

2011-08-04 11:00:35

Oracle数据库虚拟列复合触发器

2019-10-22 07:50:45

SqlServer数据库触发器

2011-08-04 13:31:50

数据库记录更改日志触发器

2010-09-13 16:46:10

SQL Server触

2010-06-30 09:36:25

SQL Server

2011-04-01 16:35:09

SQL Server数触发器

2011-05-20 14:39:28

2010-07-06 14:47:03

SQL Server数

2023-11-16 18:03:05

Kafka分布式消息

2010-07-08 13:48:38

同步两个SQLServ

2010-06-02 16:57:50

MySQL数据库同步

2019-04-30 15:28:46

数据库存储过程触发器

2011-05-20 14:06:25

Oracle触发器

2010-05-18 15:58:39

MySQL触发器

2018-08-02 10:14:49

服务器数据库主从同步

2010-07-23 15:26:29

SQL Server

2010-04-15 15:32:59

Oracle操作日志

2024-01-19 09:37:19

MySQL数据库
点赞
收藏

51CTO技术栈公众号