利用触发器实现Database1、Database2、Database3三个数据库的TableName的同步。

参考与数据库复制比较(合并复制与触发器实现同步)

代码:

   
   
   
   
  1. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tr_Database3]'and  type='TR')  
  2. drop trigger [dbo].[tr_Database3]  
  3. go  
  4. create trigger tr_Database3 on tableName for update,insert,delete 
  5. as 
  6. begin 
  7. declare @insertcount int,@deletecount int 
  8. select @insertcount=count(*) from Inserted  
  9. select @deletecount=count(*) from deleted    
  10. ---insert插入---  
  11. if (@insertcount>0 and @deletecount=0)  
  12. begin 
  13. alter table Database1.dbo.tableName disable trigger tr_Database1  
  14. insert into Database1.dbo.tableName(  
  15.     field1,field2.field3.field4)  
  16. select field1,field2.field3.field4  
  17. from inserted  
  18. alter table Database1.dbo.tableName enable trigger tr_Database1  
  19. alter table Database2.dbo.tableName disable trigger tr_Database2  
  20. insert into Database2.dbo.tableName(field1,field2.field3.field4)  
  21. select field1,field2.field3.field4  
  22. from inserted  
  23. alter table Database2.dbo.tableName enable trigger tr_Database2  
  24.  
  25. end 
  26. ---delete删除----  
  27. else if(@deletecount>0 and @insertcount=0)  
  28. begin 
  29. alter table Database1.dbo.tableName disable trigger tr_Database1  
  30. alter table Database2.dbo.tableName disable trigger tr_Database2  
  31. begin 
  32. delete Database2.dbo.tableName where Database2.dbo.tableName.account in(select account from deleted)  
  33. delete Database1.dbo.tableName where Database1.dbo.tableName.account in(select account from deleted)  
  34. end 
  35. alter table Database1.dbo.tableName enable trigger tr_Database1  
  36. alter table Database2.dbo.tableName enable trigger tr_Database2  
  37.  
  38. end 
  39. ---update更新---  
  40. else if(@deletecount>0 and @insertcount>0)  
  41. begin 
  42. alter table Database1.dbo.tableName disable trigger tr_Database1  
  43. alter table Database2.dbo.tableName disable trigger tr_Database2  
  44. begin 
  45. update Database2.dbo.tableName set Database2.dbo.tableName.field1=d.field1,Database2.dbo.tableName.field2=d.field2,Database2.dbo.tableName.field3=d.field3,  
  46. from inserted d where Database2.dbo.tableName.field4=d.field4  
  47. update Database1.dbo.tableName set Database1.dbo.tableName.field1=d.field1,Database1.dbo.tableName.field2=d.field2,Database1.dbo.tableName.field3=d.field3,  
  48.       
  49. from inserted d where Database1.dbo.tableName.field4=d.field4  
  50. end 
  51. alter table Database1.dbo.tableName enable trigger tr_Database1  
  52. alter table Database2.dbo.tableName enable trigger tr_Database2  
  53. end   
  54. end