当前位置: 首页 > 图文教程 > 数据库 > MSSQL > 如何利用触发器实现两个数据库间的同步

MSSQL
SQLServer 批量插入数据的两种方法
SQLServer 通用的分区增加和删除的算法
数据库的一些常用知识
SQLServer 连接异常与解决方法小结
sqlserver 无法验证产品密匙的完美解决方案[测试通过]
sql2000 卸载后重新安装时不能安装的解决办法
SQLServer 快速备份的十种方法
sqlserver 中一些常看的指标和清除缓存的方法
SQL 提权 常用命令
数据转换冲突及转换过程中大对象的处理
SQLServer 数据库开发顶级技巧
远程连接SQLSERVER 2000服务器方法
SQLserver2000 企业版 出现"进程51发生了严重的异常"错误的处理方法
SQLServer 触发器 数据库进行数据备份
SQLServer 数据库备份过程中经常遇到的九种情况
SQL 截取字符串应用代码
除MSSQL数据库text字段中恶意脚本的删方法
SQLServer CONVERT 函数测试结果
SQLServer 中.与::的区别
SQL 研究 相似的数据类型

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-17   浏览: 161 ::
收藏到网摘: n/a

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