表同步更新的問題的觸發器

來源:互聯網
上載者:User
觸發器|問題|觸發器   1sql server 2000 觸發器,表同步更新的問題 
  2有三個表,A ,B,C
  3A、B表中含有: A1,B1,C1 三個欄位,
  4C 表中存放A、B表中的A1、B1、C1 的集合,
  5欄位類型都為nvarchar(10),
  6當表A的資料被更新、刪除、插入後要反映到C表。
  7當表B的資料被更新、刪除、插入後要反映到C表。
  8假定A,B表中在a1,b1,c1上有唯一索引
  9
 10
 11      這個問題如果純屬從理論來說,是很容易解決的,因為從要求可知,實質上C表存放的資料即為A、B表的並集。可以在A、B表上建立相同的trigger,一旦A、B表上有變化,比如插入、刪除或更新時,即清空C表資料,然後把A、B表的資料union後插入C表中即可實現目的:)呵呵呵。。。
 12
 13      下面的trigger的實現原理是:
 14
 15       當A表插入資料時,檢查C表中是否有A表將要插入的資料,如果無,則將這行資料插入到C表中,反之,則不需要操作。
 16
 17       當A表update時, 檢查B表中是否有更新前這行資料,如果有,則C表中應該保留這行資料且把A表中更新後的資料也插入到C表中去。如果B表中沒有A表更新前的這行資料且C表中沒有A表更新後的這行資料,則需要用A表更新後的資料來更新C表中與A表更新前這行資料相同的資料;如果B表中沒有A表更新的的這行資料且C表中有A表更新後的這行資料,則需要從C表中刪除跟A表更新前相同的那行資料(因為更新A表後,A表和B表都沒有A表更新前的那行資料了,則這行資料顯然在C表中不應該再存在了)。
 18
 19       當A表中刪除時,檢查B表是否還存在A表要刪除的這行資料,如果有,則不能刪除C表中與A表要刪除的資料相同的行。反之,則執行刪除操作。
 20
 21
 22    B表中的trigger跟A表中的原理相同。
 23
 24
 25CREATE TRIGGER SYNC_C_BY_A
 26ON A
 27AFTER INSERT,UPDATE,DELETE
 28AS
 29Declare @Dml            TinyInt  --1:Insert 2:Update 3:Delete            
 30Declare @RowsD          Int            
 31Declare @RowsI          Int 
 32Declare @A1_D           nvarchar(10)
 33Declare @B1_D           Nvarchar(10)
 34Declare @C1_D           Nvarchar(10)
 35--確定是哪一種dml操作           &nb



相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。