为sql server中的一组行生成哈希

kri*_*son 12 t-sql sql-server

SQL Server 2012中是否有任何方法可以生成一组行和列的哈希?

我想生成一个哈希,将其存储在父记录中.当更新进来时,我将传入的哈希与父记录哈希进行比较,我将知道数据是否已更改.

所以这样的事情会很好:

SELECT GENERATEHASH(CONCATENATE(Name, Description, AnotherColumn))
FROM MyChildTable WHERE ParentId = 2 -- subset of data belong to parent record 2
Run Code Online (Sandbox Code Playgroud)

"CONCATENATE"将是一个聚合函数,它不仅可以连接列,还可以连接结果集中的行.像MAX一样,但返回所有内容作为字符串连接.

希望这可以帮助您了解我的意思!

我试图解决的根本问题是我的客户端系统执行大量分层数据的导入.如果我可以通过使用哈希来避免处理,那么我认为这将节省大量时间.目前,当必须处理重复数据时,SP的运行速度要慢300%.

非常感谢

usr*_*usr 9

您可以使用CHECKSUM_AGG聚合.它是为此目的而制作的.

  • 不幸的是,CHECKSUM已经知道了弱点(即实际碰撞).例如十进制类型http://sqlserverpains.blogspot.com.au/2008/06/checksum-pains.html所以要小心. (4认同)

小智 9

select HashBytes('md5',convert(varbinary(max),(SELECT * FROM MyChildTable WHERE ParentId = 2 FOR XML AUTO)))
Run Code Online (Sandbox Code Playgroud)

但是HashBytes仅限于8000字节......你可以创建一个函数来获得每8000字节的de Md5 ....