我们试图在ETL过程中实现变更检测。Sql - 批量加密哈希生成
所以我们决定要使用
SET a.[HASH] = (SELECT
master.dbo.fn_varbintohexsubstring(0, HashBytes('md5', (SELECT TOP 1 * FROM customer_demographics_staging b WHERE b.customer_no = a.customer_no FOR XML RAW)), 1, 0))
FROM customer_demographics_staging a
对于70万次的记录和大约140列的表格(我们还没有确定改变列)的加密哈希,之前的查询运行约一个半小时我们取消了它。
无论如何,除了减少查询次数,我们可以改进这个吗?
看起来非常好。我会放弃它并让你知道。关于CHECKSUM的使用,提到的文档可能在值更改时不会更改,因此不适用于更改检测。这是我们的第一选择。 – frostymarvelous
我认为这只是一个CYA,因为任何哈希算法都会碰撞(包括MD5)。您也可以在表格中添加一个“rowversion”列,然后完全跳过这个计算。 –
由于我们使用ssis从oracle数据库中提取数据,因此Rowversion不起作用。 – frostymarvelous