SQL Server 2008 - 检查行更改

时间:2011-04-27 13:34:39

标签: sql-server sql-server-2008

我没有使用大量的或语句来检查行是否被更改,而是调查了checksum()或binary_checksum()。这种情况的最佳做法是什么?它是使用checksum(),binary_checksum()还是其他一些方法?我喜欢使用校验和选项之一的想法,所以我不必为我的更新构建一个庞大的或声明。

修改 对不起大家,我应该提供更多细节。我需要从一些外部来源提取数据,但因为我正在使用合并复制,所以我不想只是井喷并重建表。我想只更新或插入真正有变化或不存在的行。我将在目标数据库中有一个配对的源数据版本,它将同步到客户端。我试图找到一种检测行更改的好方法,而不必查看每一列来执行更新。

非常感谢任何建议。

谢谢,

取值

2 个答案:

答案 0 :(得分:0)

如果我们有更多关于你正在做什么的信息可能会有所帮助,但一般来说,只要你有权访问要比较的行的原始校验和,checksum()选项就能正常工作。

答案 1 :(得分:0)

首先,如果您使用的是实际的合并复制,则应该为您更新正确的行。

其次,通常确定行是否已更改的方法是使用数据类型为timestamp的列,现在称为rowversion,每次更新行时都会更改。但是,这种类型的列只会告诉您自上次读取值以来值是否已更改,这意味着您必须已读取并存储要用于比较的时间戳。因此,这可能不适合你。

最后,一个可能适合您的解决方案将是相关表格上的触发器,用于更新实际的DateTime(或更好的DateTime2)列,其中包含插入时的当前日期和时间发生了。您的比较需要将上次同步的日期时间存储到表中,并比较上次更新列中的日期时间以确定哪些行已更改。