6

我的项目目前有一个包含多个表的数据库,其中最重要的一个具有一个包含非常大条目的二进制列(代表序列化的 C# 对象)。生产数据库中有大量条目,在调试时,通常需要将这些条目拉到本地开发数据库中(因为远程调试似乎不起作用,这是一个单独的问题)。

如果我尝试将此表上的本地和生产数据库与所有列进行比较,则比较可能需要长达一个小时,或者最终会超时,但这在过去是有效的,并且允许我下载条目并成功调试它们。如果我比较除二进制数据列之外的所有表列,则比较几乎是瞬时的,但该列不会传输到生产数据库。

我的问题是:有没有办法在两个表之间运行数据比较,不包括比较本身的特定列(其他字段提供足够的信息来区分没有它)但在更新目标数据库时包括它?

4

1 回答 1

-1

您可以在大varbinary字段上使用哈希函数并进行比较。 HASHBYTES使用 MD5 是一种很好的比较方法,因为从天文角度来看,它不太可能为两个不同的输入生成相同的哈希值。问题是,HASHBYTES仅适用于最多 8000 字节的字段。通过创建一个函数可以解决一些问题。有几张贴在这里:

SQL Server 2008 和 HashBytes

您可以选择在插入或更新时使用持久计算字段将哈希值存储在表中。或者您可以在进行比较查询时生成哈希值。

于 2015-06-26T14:53:54.687 回答