sqlserver对比两个数据库的表的方法(哈希)
				
									
					
					
						|  | 
							maoxiaoming 2025年9月4日 14:38
								本文热度 1130 | 
					
				 
				代码对“单张表”做数据一致性判断的 核心逻辑 只有 3 步,全在下面 6 行里:
'1. 行数
cntPub = conn.execute("select count(*) from [表名]")(0)
cntSub = conn.execute("select count(*) from [表名]")(0)
'2. 整表哈希
hashPub = conn.execute("select checksum_agg(binary_checksum(*)) from [表名]")(0)
hashSub = conn.execute("select checksum_agg(binary_checksum(*)) from [表名]")(0)
'3. 一致性判断
一致 = (cntPub = cntSub) And (hashPub = hashSub)
逐句拆解
| 语句 | 作用 | 备注 | 
|---|
| count(*) | 拿到 当前表的总行数 | 行数不同 → 肯定不一致 | 
| binary_checksum(*) | 对 每一行所有列 做二进制校验和(行级指纹) | 即使行数相同,内容不同也会得到不同值 | 
| checksum_agg(...) | 把整表所有行的指纹再 聚合 成一个 32 位整数 | 整张表的“指纹” | 
| cntPub = cntSub | 行数相同 | 第一层过滤 | 
| hashPub = hashSub | 聚合校验和相同 | 第二层过滤 | 
| 同时满足 | 认为 数据完全一致 | 速度快、无遗漏 | 
为什么用 checksum_agg 而不是逐行遍历?
最终判定规则
- 订阅库 缺表 → 直接差异。 
- 行数 不同 → 差异。 
- 行数相同但哈希 不同 → 差异。 
- 行数 & 哈希 都相同 → 视为数据完全一致 
该文章在 2025/9/4 14:38:05 编辑过