利用觸發實現三個數據庫中的某個表的同步

利用觸發器實現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 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章