列较少的 Visual Studio 数据比较

Posted

技术标签:

【中文标题】列较少的 Visual Studio 数据比较【英文标题】:Visual Studio Data Comparison with less columns 【发布时间】:2015-06-23 11:27:09 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

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

SQL Server 2008 and HashBytes

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

【讨论】:

以上是关于列较少的 Visual Studio 数据比较的主要内容,如果未能解决你的问题,请参考以下文章

std::tie 用于较少的比较和 char 数组

Visual Studio2017 数据库数据比较

SQL Server的优点与缺点

Visual Studio 2013 - 数据库数据比较

Visual Studio2017 数据库架构比较

如何使 Visual Studio 架构比较忽略数据库引用