【发布时间】:2015-11-17 18:07:29
【问题描述】:
我有一张包含产品交付信息的表格。我得到附加到此表的每日文件。但是,如果导入出现问题,我不能简单地重新导入同一个文件,因为它可能已经导入了一些数据,然后我就会有重复。
我正在考虑添加校验和/哈希行,以便我可以比较这些行并省略已经存在的内容。
表格如下(简化):
- id(标识行,整数)
- ordernr(整数)
- 项目(varchar)
- itemcount(整数)
- 交货日期(日期)
- ...还有一些东西
我想添加一行“校验和”,它是 ordernr、item、itemcount 和 deliverydate 行的组合哈希。由于表相当大(1m+ 行),我什至更喜欢 right(hash,8),所以 varchar(8) 对于校验和行就足够了。
到目前为止,我已经到了这里:
SELECT o1.rdid, HASHBYTES('md5', (
SELECT ordernr, item, deliverydate, itemcount
FROM shop_tt_deliveries_uk o2
WHERE o2.rdid = o1.rdid FOR XML RAW))
FROM shop_tt_deliveries_uk o1
生成哈希的方法如下:
rdid (No column name)
98851 0xA819EEB0B7463DCB11AE8170879F867C
98852 0x73DB5FE112707BB3D9564DE063882F30
98853 0x3F81DBCED4D6B200CD605BC774FD5EB4
98854 0xF388A700995F8B589AE31CFE0AEF9568
但是已经添加了 right() 会导致奇怪的东西(我期望第一行是 '879F867C'):
rdid (No column name)
98851 ®p‡Ÿ†|
98852 ÙVMàcˆ/0
98853 Í`[Çtý^´
98854 šãþ
并且更新表格根本不起作用:
UPDATE shop_tt_deliveries_uk d
SET checksum = HASHBYTES('md5', (
SELECT ordernr, item, deliverydate, itemcount
FROM shop_tt_deliveries_uk o2
WHERE o2.rdid = o1.rdid ))
WHERE checksum IS NULL
有什么见解吗?
【问题讨论】:
标签: sql-server hash checksum