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')
看看上面的内容。即使文本中存在差异,2对地址也将生成相同的校验和值。我的理解是,虽然你不能保证CHECKSUM和BINARY_CHECKSUM对于任何随机内容都不同,它们应该有助于确定给定行中相对较小的变化。
有趣的是,这些价值观恰恰相反。它们为非常相似的数据值生成相等的校验和值。事实上,这些是大型(680,000条记录)地址表中唯一的重复校验和值。
我有点担心我在生成UPDATE时误解了校验和的价值?我是否必须通过现场比较求助于暴力场,以确保在一行数据中获取变化?
这些示例的原始数据分为6个单独的列。为清晰起见,我已将代码示例缩减到最小状态。
答案 0 :(得分:3)
校验和永远不会完全万无一失。对于一个完全始终正确无关紧要的解决方案来说,蛮力就是这样。虽然可以使用一些不太强烈的方法。
校验和非常简单。尝试使用hashbytes。那么你可以使用更混乱的算法,如md5。
例如:
SELECT HASHBYTES('MD5', 'Glenfield Hospital, Groby Road, , Leicester, Leicestershire, LE3 9DZ')
答案 1 :(得分:1)
尝试使用带有MD5或SHA1的HASHBYTES()代替BINARY_CHECKSUM。首先阅读HASHBYTES()的帮助......
答案 2 :(得分:0)
您可以使用hashbytes:
SELECT HASHBYTES('MD5', 'Glenfield Hospital, Groby Road, , Leicester, Leicestershire, LE3 9DZ')
SELECT HASHBYTES('MD5', 'Glenfield Hospital, Groby Road, , Leicester, Leicestershire, LE3 9EJ')