CHECKSUM 相关函数:CHECKSUM、CHECKSUM_AGG、BINARY_CHECKSUM和HASHBYTES

CHECKSUM 函数的主要意图是基于一个表达式或者列表创建一个哈希索引。如果说你用它在表级别计算和存储一个列,表示基于这些列上的 CHECKSUM 使得这条记录在表里唯一,而这有助于判断是否一行数据有改变。这个架构可被用来替代关联所有的列使得记录唯一,来检查是否这条记录被更新。

 

当使用这些函数的时候,有些需要注意的:

1. 你需要确保在两次 CHECKSUM 比较之间,列或表达式的顺序是相同的,否则结果将会不同。

2. 不推荐用 CHECKSUM(*),因为这种方式产生的值将会依赖于在运行时表定义的列顺序,在这个过程中表顺序可能会被改变。所以,显示定义列的列表。

3. 当包含 datetime 数据类型的列时要注意,因为它是精确到1/300秒,小的变动就导致不同的CHECKSUM值。因此,如果你不得不使用 datetime 类型列,你先要确保获得准确的日期加小时或分钟的组合,这个取决于你想要的精确度。

 

四个相关的函数,下面介绍:

 

【内置函数 - 系统函数 - CHECKSUM】

功能:返回按照表的某一行或一组表达式计算出来的校验和值。 CHECKSUM 用于生成哈希索引。

语法:CHECKSUM ( * | expression [ ,...n ] )

参考:https://msdn.microsoft.com/zh-cn/library/ms189788.aspx

 

【内置函数 - 聚合函数 - CHECKSUM_AGG】

功能:返回组中各值的校验和。 将忽略 Null 值。 后面可以跟随 OVER 子句。

语法:CHECKSUM_AGG ( [ ALL | DISTINCT ] expression )

参考:https://msdn.microsoft.com/zh-cn/library/ms188920.aspx

 

【内置函数 - 系统函数 - BINARY_CHECKSUM】

功能:返回按照表的某一行或表达式列表计算的二进制校验和值。 BINARY_CHECKSUM 可用于检测表中行的更改。

语法:BINARY_CHECKSUM ( * | expression [ ,...n ] )

参考:https://msdn.microsoft.com/zh-cn/library/ms173784.aspx

 

【内置函数 - 加密函数 - HASHBYTES】

功能:返回其在 SQL Server 中的输入的 MD2、MD4、MD5、SHA、SHA1 或 SHA2 哈希值。

语法:HASHBYTES ( '', { @input | 'input' } )

::= MD2 | MD4 | MD5 | SHA | SHA1 | SHA2_256 | SHA2_512

参考:https://msdn.microsoft.com/zh-cn/library/ms174415.aspx