利用觸發器實現Database1、Database2、Database3三個數據庫的TableName的同步。
參考與數據庫複製比較(合併複製與觸發器實現同步)
代碼:
- if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tr_Database3]') and type='TR')
- drop trigger [dbo].[tr_Database3]
- go
- create trigger tr_Database3 on tableName for update,insert,delete
- as
- begin
- declare @insertcount int,@deletecount int
- select @insertcount=count(*) from Inserted
- select @deletecount=count(*) from deleted
- ---insert插入---
- if (@insertcount>0 and @deletecount=0)
- begin
- alter table Database1.dbo.tableName disable trigger tr_Database1
- insert into Database1.dbo.tableName(
- field1,field2.field3.field4)
- select field1,field2.field3.field4
- from inserted
- alter table Database1.dbo.tableName enable trigger tr_Database1
- alter table Database2.dbo.tableName disable trigger tr_Database2
- insert into Database2.dbo.tableName(field1,field2.field3.field4)
- select field1,field2.field3.field4
- from inserted
- alter table Database2.dbo.tableName enable trigger tr_Database2
- end
- ---delete刪除----
- else if(@deletecount>0 and @insertcount=0)
- begin
- alter table Database1.dbo.tableName disable trigger tr_Database1
- alter table Database2.dbo.tableName disable trigger tr_Database2
- begin
- delete Database2.dbo.tableName where Database2.dbo.tableName.account in(select account from deleted)
- delete Database1.dbo.tableName where Database1.dbo.tableName.account in(select account from deleted)
- end
- alter table Database1.dbo.tableName enable trigger tr_Database1
- alter table Database2.dbo.tableName enable trigger tr_Database2
- end
- ---update更新---
- else if(@deletecount>0 and @insertcount>0)
- begin
- alter table Database1.dbo.tableName disable trigger tr_Database1
- alter table Database2.dbo.tableName disable trigger tr_Database2
- begin
- update Database2.dbo.tableName set Database2.dbo.tableName.field1=d.field1,Database2.dbo.tableName.field2=d.field2,Database2.dbo.tableName.field3=d.field3,
- from inserted d where Database2.dbo.tableName.field4=d.field4
- update Database1.dbo.tableName set Database1.dbo.tableName.field1=d.field1,Database1.dbo.tableName.field2=d.field2,Database1.dbo.tableName.field3=d.field3,
- from inserted d where Database1.dbo.tableName.field4=d.field4
- end
- alter table Database1.dbo.tableName enable trigger tr_Database1
- alter table Database2.dbo.tableName enable trigger tr_Database2
- end
- end