Sql server SQL Server 2008-检查行更改

Sql server SQL Server 2008-检查行更改,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我没有使用大量的or语句来检查一行是否被修改,而是查看校验和或二进制校验和。对于这种情况,什么是最佳做法?它是使用校验和、二进制校验和还是其他方法?我喜欢使用一个校验和选项的想法,这样我就不必为我的更新构建大量的or语句 编辑: 对不起大家,我应该提供更多的细节。我需要从一些外部源中提取数据,但由于我使用的是合并复制,所以我不想只中断并重建表。我只想更新或插入真正有更改或不存在的行。我将在我的目标数据库中有一个成对的源数据版本,它将同步到客户端。我试图找到一种检测行更改的好方法,而不必查看每一列

我没有使用大量的or语句来检查一行是否被修改,而是查看校验和或二进制校验和。对于这种情况,什么是最佳做法?它是使用校验和、二进制校验和还是其他方法?我喜欢使用一个校验和选项的想法,这样我就不必为我的更新构建大量的or语句

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

如有任何建议,我们将不胜感激

谢谢


S

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

首先,如果您使用的是实际的合并复制,它应该为您更新适当的行

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


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

您能更详细地描述一下当前的情况吗?这是为了什么?合并或乐观并发?请记住,您可以使用校验和或二进制校验和来检测两行是否完全不同,但不能使用它来确认它们完全相同-可以有两组不同的值,但是返回相同的校验和-因此这里可能仍然有一些灰色区域。@Damien_the_unsiever,因此如果我使用checksum@scarpacci-相反-您可能认为两行是相同的,因为它们具有相同的校验和值,而实际上它们是不同的。