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

36 篇文章 1 订阅

这是触发器服务器设置的文章:

http://wenku.baidu.com/view/edd6b46bf5335a8103d22003.html


若对于同一数据库实例中的两个数据库进行同步则直接对数据库表创建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

  -- =============================================

  -- Author: gsoosg

  -- 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值