You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL CHECKSUM在SSMS与VS(Dapper/EF)中返回值不一致问题求助

问题:SQL Server CHECKSUM在SSMS与C#(Dapper/EF)中返回值不一致

背景

  • 目标:识别两台运行兼容性级别150的SQL Server中需要更新的记录,通过对比其中一台视图返回的多字段(Uid、DateTime、int、Varchar等)CHECKSUM值与另一台服务器表的对应值,判断记录是否变更。

现象

  • 在SSMS中执行相同查询,两边的CHECKSUM结果始终匹配;
  • 在C# 2022中使用Dapper或Entity Framework查询时,参考服务器的结果始终正确,源视图却持续返回固定的错误值。

差异细节

对比发现CHECKSUM结果的中间字节存在差异:

  • 示例1:
    • 源视图返回值:6DC8 D3BB
    • 参考服务器返回值:6DCC 03BB
    • 二进制差异:1000(8) vs 1101(D);0110(C) vs 0000(0),怀疑是字节序问题。
  • 示例2(64位相关现象):
    • 源视图返回值:FFFF FFFF B4DD DA5B
    • 参考服务器返回值:FFFF FFFF B4C4 0A5B
    • 二进制差异:1101(D) vs 1101(D);0100(4) vs 0000(0)(Windows计算器转换,可信度80%)

补充信息

  • 已知CHECKSUM存在碰撞风险,可靠性低于HASHBYTES,但当前方案并非本人制定;
  • SSMS与C#代码使用完全相同的查询语句,视图通过CHECKSUM(字段1, 字段2, ...)生成checkvalue,可提供复现代码;
  • 曾考虑通过添加固定排序规则解决(排序规则会影响CHECKSUM结果),但修改需执行5万次更新(耗时数天),暂未实施,同时对仅中间单个字节差异的现象存在疑问。

内容的提问来源于stack exchange,提问作者Henrik Carlsen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 15:02:37