您好我正在寻找一个解决方案 仅在值更改时更新table1中的值。我的意思是与tableb比较并仅更新已更改的值
答案 0 :(得分:3)
neils解决方案的替代方法是使用binary checksum并将其存储在表格的字段中,然后与其进行比较
不是说它是一个更好的解决方案,只是给你一些选择。
答案 1 :(得分:1)
一次多行,尝试:
UPDATE a
SET IntCol=b.IntCol
,varcharCol=b.varcharCol
,DatetimeCol=b.DatetimeCol
FROM TableA a
INNER JOIN (SELECT pk,IntCol,varcharCol,DatetimeCol FROM TableA
EXCEPT
SELECT pk,IntCol,varcharCol,DatetimeCol FROM TableB
) dt ON a.pk=dt.pk
答案 2 :(得分:0)
您可以在源表上使用更新目标表的触发器。
但是,如果有大量的数据可能会严重减慢源上的插入/更新速度。在这种情况下,我将触发器插入第3个表。然后,预定作业可以处理该表并删除记录(当然,适当使用事务)。
完全不同的方法是将触发一层移动到您的应用程序中,并使用基于消息的方法。在这种情况下,您可以充分利用这两个方面,因为侦听消息的过程将尽可能快地处理它们,从而导致目标表的几乎实时更新。
所以你可以吃蛋糕,然后吃。