我使用觸發器來保持單個數據庫中兩個相同的表同步。一個用於內部專有系統,另一個用於向外界展示一部分數據。我無法爲兩者使用相同的表格。SQL Server 2表同步遞歸
我需要更新,插入,刪除任何表中應用於其他。
到目前爲止,我在兩個表上使用觸發器而不是預定的存儲過程,因爲我想立即更新。問題是,表A的更新觸發了更新表B的觸發器,該表觸發更新表A的觸發器,觸發器觸發表B ......等等。
什麼是停止遞歸的最佳方法?
一種方法是先檢查數據,看它是否是不同的,這樣的事情:
SELECT @cempno = inserted.cempno FROM inserted
SELECT @count = COUNT(*)
FROM jcempy j INNER JOIN zhhjcempy z ON j.cempno = z.cempno AND j.cempno = @cempno
WHERE (j.ccostcode <> z.ccostcode)
OR (j.cimearnreg <> z.cimearnreg)
OR (j.cimearnot <> z.cimearnot)
OR (j.cimearndt <> z.cimearndt)
OR (j.cimearnl1 <> z.cimearnl1)
IF @count = 1
BEGIN
-- Update the record
END
另一種方法可以是使用保存狀態標誌,以顯示該表第一發起的第三個表更新,但我有一種感覺,管理這個問題一旦有100名用戶在系統中喋喋不休,就會出現問題。
任何想法或對數據檢查會導致哪種性能損失的評論?
謝謝!
您是否能夠將一個表實際上指向另一個[可更新視圖](https://msdn.microsoft.com/en-nz/library/ms187956.aspx#Anchor_3)? – Blorgbeard
@Blorgbeard不幸的是,這裏涉及第三方工具。有趣的想法,但我沒有想到這一點。 – NelsonH
您需要重新設計,不使用觸發器。有句古話:「有一隻手錶的人知道現在是幾點,一個有兩隻手的人永遠不會確定。」 – JVC