SQLSERVER用HASHBYTES 函数判断数据是否有变化

SQLSERVER用HASHBYTES 函数判断数据是否有变化

两方之间的数据同步,无非就是分为主动推送和被动查询两种方式。从实时性和效率方面看,主动推送毫无疑问是最优的。被动查询尽管很低效,但没有选择的时候该用还是要用。

就假如对方给你提供了一个视图,你要定时查询这个视图获取新增的或者有变动的数据,同步到你方的数据库里来。这时也许你会采用定时从这个视图中查询那些产生或修改时间在当前时间点之前n(分钟/小时/天…)以内的数据,然后对拿到的这些数据进行处理,存入到你的库里。

好了,现在切入到本文的中心。用这种方式,或多或少总会有一部分数据会被多次查询到。对于一条数据(用唯一字段标识的),如何判断本次查询到的这一条与上一次查到的这一条有没有出现变化呢?只有在有变化的时候,才有必要再次对它进行处理入库。

这时可以用SQLSERVER自带的HASHBYTES函数,它可以用某种算法对某一字符串或二进制串执行哈希操作,生成一个hash值。对于一条数据,你可以把这条数据的各个字段的值拼接成一个长串,然后对这个长串做哈希运算,通过比较两次生成的hash值是否一样,就知道这条数据有没有变化了。

HASHBYTES 函数用法如下:
HASHBYTES ( @algorithm, @input )
@algorithm 可以从集合 { MD2 | MD4 | MD5 | SHA | SHA1 | SHA2_256 | SHA2_512 }中取一个值

用法举例

SELECT HASHBYTES('MD5','abcdefghi')

对于同一个串,多次用同样的算法哈希后得到的hash值肯定是一样的。
但是, 如果串中的至少一个字符发生更改后再次hash,绝大多数时候都能正确得到一个不同的hash值,仅有极小的可能性会得到和更改之前得到的完全相同的hash值。显然,当这种极小概率的情况发生的时候,会导致你的业务出现问题。所以用这个函数的时候,要考虑你的业务能不能容忍这种小概率事件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值