校验和为不同的集返回相同的值

时间:2013-05-30 19:48:47

标签: tsql duplicates checksum

很奇怪为什么SQL Server校验和函数为这两个不同的输入值返回相同的值?

SELECT CHECKSUM(2792,2847), 2792+2847 » **42399**,5639

SELECT CHECKSUM(2716,3167), 2716+3167 » **42399**,5883

2 个答案:

答案 0 :(得分:0)

通过查看文档CHECKSUM (Transact-SQL)文档,它表明存在重复的可能性并使用HASHBYTES (Transact-SQL)代替

答案 1 :(得分:0)

我有这个问题。小数和CheckSum()似乎有问题。 通过将我的校验和()中使用的所有列转换为varchar

来解决它

E.g。 而不是:select checksum(columnA) from dbo.Table 使用:select checksum(cast(columnA as varchar)) from dbo.Table

SELECT CHECKSUM(CAST(2792 AS VARCHAR), CAST(2847 AS VARCHAR)), 2792+2847>> -1228994846,5639

SELECT CHECKSUM(CAST(2716 AS VARCHAR), CAST(3167 AS VARCHAR)), 2716+3167>> 1320541154,5883