TSQL CHECKSUM难题

And*_*les 5 t-sql sql-server

SELECT BINARY_CHECKSUM('Clifton House, Thornaby Place, Teesdale South, Stockton-On-Tees, Cleveland, TS17 6SD')
SELECT BINARY_CHECKSUM('Clifton House, Teesdale South, Thornaby Place, Stockton-On-Tees, Cleveland, TS17 6SD')

SELECT BINARY_CHECKSUM('Glenfield Hospital, Groby Road, , Leicester, Leicestershire, LE3 9DZ')
SELECT BINARY_CHECKSUM('Glenfield Hospital, Groby Road, , Leicester, Leicestershire, LE3 9EJ')
Run Code Online (Sandbox Code Playgroud)

看看上面的内容.即使文本中存在差异,2对地址也将生成相同的校验和值.我的理解是,虽然您不能保证CHECKSUM和BINARY_CHECKSUM对于任何随机内容都不同,它们应该有助于确定给定行中相对较小的更改.

有趣的是,这些价值观恰恰相反.它们为非常相似的数据值生成相等的校验和值.事实上,这些是大型(680,000条记录)地址表中唯一的重复校验和值.

我有点担心我在生成UPDATE时误解了校验和的价值?我是否必须通过现场比较来求助于暴力场,以确保在一行数据中获得变化?

这些示例的原始数据分为6个单独的列.为清晰起见,我已将代码示例缩减到最小状态.

She*_*ena 3

校验和从来都不是完全万无一失的。对于无论什么解决方案都完全正确的方法来说,蛮力就是出路。不过,有一些强度较低的方法也可以发挥作用。

校验和几乎是一个非常简单的哈希值。尝试使用哈希字节代替。那么你可以使用更混乱的算法,如 md5。

例如:

SELECT HASHBYTES('MD5', 'Glenfield Hospital, Groby Road, , Leicester, Leicestershire, LE3 9DZ')
Run Code Online (Sandbox Code Playgroud)