如何防止 Checksum() 在 sql server 中生成重复值
Posted
技术标签:
【中文标题】如何防止 Checksum() 在 sql server 中生成重复值【英文标题】:How to Prevent Checksum() from generating Duplicate Values in sql server 【发布时间】:2011-07-28 09:10:23 【问题描述】:众所周知,checksum
可能会生成重复值,我应该找到一种方法来防止checksum
生成重复值...
请帮忙
谢谢你的问候
【问题讨论】:
你不能也不需要这样做。如果您想要一个唯一的标识,那么有限大小的值(校验和)不是可行的方法。 【参考方案1】:你不能。 CHECKSUM 永远不能保证唯一。
MSDN for CHECKSUM 表示改用HASHBYTES,这样重复的可能性要小得多。
但是,任何散列函数不能保证 100% 没有重复。如果你想要“没有重复”,那么你不应该散列......
【讨论】:
【参考方案2】:考虑使用HashBytes
来自MSDN:
当一个 MD5 哈希算法是 指定,HashBytes 返回相同结果的概率 两个不同的输入远低于CHECKSUM。
例子:
DECLARE @HashThis nvarchar(4000);
SELECT @HashThis = CONVERT(nvarchar(4000),'dslfdkjLK85kldhnv$n000#knf');
SELECT HashBytes('SHA1', @HashThis);
GO
【讨论】:
以上是关于如何防止 Checksum() 在 sql server 中生成重复值的主要内容,如果未能解决你的问题,请参考以下文章