我使用触发器来保持单个数据库中两个相同的表同步。一个用于内部专有系统,另一个用于向外界展示一部分数据。我无法为两者使用相同的表格。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