checksum返回结果相同?

编译失败 2007-10-30 06:53:58
select checksum('Q-65') 

select checksum('Q-16')

得到的结果是一样的?

checksum 得到的不是唯一值吗?binary_checksum也是会有重复.

有什么函数可以将多个列聚合得到唯一值?并且效率要很高。想用它来做一个计算字段
...全文
443 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
编译失败 2007-10-31
  • 打赏
  • 举报
回复
搜了半天总算找到答案了,checksum只能保证相同的数据一定得到相同的校验码,却不能保证不同的数据一定得到不同的校验码,也就是有重复的可能,各位用checksum值做比较可要小心了,新的Sql2005增加了HashBytes函数用于得到MD2|MD4|MD5|SHA|SHA1等算法的校验码,并在checksum帮助中增加了一句

...如果表达式列表中的某个值发生更改,则列表的校验和通常也会更改。但只在极少数情况下,校验和会保持不变。因此,我们不推荐使用 CHECKSUM 来检测值是否更改,除非应用程序可以容忍偶尔丢失更改。请考虑改用 HashBytes。指定 MD5 哈希算法时,HashBytes 为两个不同输入返回相同结果的可能性比 CHECKSUM 小得多。
编译失败 2007-10-30
  • 打赏
  • 举报
回复
大哥,我不只是针对这一个,我在我现有表上建了一个checksum的计算字段,检查后发现有重复值,'Q-65','Q-16'是从重复ID中选出来的不同的值,我换了用binary_checksum来做,没想到重复更多了,再说我也不打算区分大小写。

既然会有重复值那用这个校验还有何意义?!这checksum到底能用在什么地方?

楼上的'是啥意思?
中国风 2007-10-30
  • 打赏
  • 举报
回复
select   binary_checksum(Q-65)   

select binary_checksum(Q-16)
中国风 2007-10-30
  • 打赏
  • 举报
回复
select binary_checksum('Q-65')

select binary_checksum('Q-16')


-----------
343637

(所影响的行数为 1 行)


-----------
343590

(所影响的行数为 1 行)


checksum不区分大小写
binary_checksum区分
BINARY_CHECKSUM
返回对表中的行或表达式列表计算的二进制校验值。BINARY_CHECKSUM 可用于检测表中行的更改。

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧