如何防止 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 中生成重复值的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server:BINARY_CHECKSUM 为相同的值提供不同的结果

哈希一行SQL行?

创建用户后如何防止自动登录

如何计算IP或ICMP协议首部里的checksum字段

T-SQL中的随机数

当用户完成列重新排序时如何防止 renderHeaderCell() 调用