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 ( '<algorithm>', { @input | 'input' } )
<algorithm>::= MD2 | MD4 | MD5 | SHA | SHA1 | SHA2_256 | SHA2_512
参考:https://msdn.microsoft.com/zh-cn/library/ms174415.aspx