SQL Server比较表并更新(如果已更改)

时间:2009-09-25 14:54:00

标签: sql sql-server sql-server-2005 tsql

您好我正在寻找一个解决方案 仅在值更改时更新table1中的值。我的意思是与tableb比较并仅更新已更改的值

3 个答案:

答案 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个表。然后,预定作业可以处理该表并删除记录(当然,适当使用事务)。

完全不同的方法是将触发一层移动到您的应用程序中,并使用基于消息的方法。在这种情况下,您可以充分利用这两个方面,因为侦听消息的过程将尽可能快地处理它们,从而导致目标表的几乎实时更新。

所以你可以吃蛋糕,然后吃。