技术开发 频道

触发器在增量同步数据的运用

  【IT168技术文档】

  触发器可以记录对表的添加,修改,删除,这样可以通过触发器,记录一段时间内的表的变动的记录,把这些记录存到一个变动记录表里,数据同步的时候,就可以读取这张变成的记录表,只需要同步变动过的记录,这样可以大大提高同步的速度。

  对原表删除的操作,可以能新表做DELETE操作;对原表进行Insert 或Update操作,可以执行新建或更新操作。

  下面是一个触发器(SQL Server 2000)的例子:

if exists (select * from dbo.sysobjects where id = object_id(N'[risk].[TRG_GUARANTEE_R_IN_HG]') 
and OBJECTPROPERTY(id, N'IsTrigger') = 1) drop trigger [risk].[TRG_GUARANTEE_R_IN_HG] if exists (select * from dbo.sysobjects where id = object_id(N'[risk].[TRG_GUARANTEE_R_DEL_HG]')
and OBJECTPROPERTY(id, N'IsTrigger') = 1) drop trigger [risk].[TRG_GUARANTEE_R_DEL_HG] CREATE TRIGGER TRG_GUARANTEE_R_IN_HG ON GUARANTEE_R FOR INSERT,UPDATE AS UPDATE A SET ARJ_MARK='M',CREATE_TIME=GETDATE(),USING_FLAG='0000000000' FROM LOG_ENTRY_INC2 A INNER JOIN INSERTED B ON A.ENTRY_ID = B.ENTRY_ID INSERT INTO LOG_ENTRY_INC2(ENTRY_ID,ARJ_MARK,CREATE_TIME,USING_FLAG) SELECT ENTRY_ID,'M',GETDATE(),'0000000000' FROM INSERTED where ENTRY_ID NOT IN (SELECT ENTRY_ID FROM LOG_ENTRY_INC2) CREATE TRIGGER TRG_GUARANTEE_R_DEL_HG ON GUARANTEE_R FOR DELETE AS UPDATE A SET ARJ_MARK='D',CREATE_TIME=GETDATE(),USING_FLAG='0000000000' FROM LOG_ENTRY_INC2 A INNER JOIN INSERTED B ON A.ENTRY_ID = B.ENTRY_ID INSERT INTO LOG_ENTRY_INC2(ENTRY_ID,ARJ_MARK,CREATE_TIME,USING_FLAG) SELECT ENTRY_ID,'D',GETDATE(),'0000000000' FROM DELETED where ENTRY_ID NOT IN (SELECT ENTRY_ID FROM LOG_ENTRY_INC2)

  另外需要说明的:

  触发器没有updated更新时,旧数据是deleted,新数据是inserted。

0
相关文章