BINARY_CHECKSUM (Transact-SQL)

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

主题链接图标Transact-SQL 语法约定

语法

BINARY_CHECKSUM ( * | expression [ ,...n ] ) 

参数

  • *
    指定对表中的所有列进行计算。BINARY_CHECKSUM 在计算中忽略具有不可比数据类型的列。不可比数据类型包括 text、ntext、image、cursor、xml 和不可比公共语言运行库 (CLR) 用户定义的类型。

  • expression
    任何类型的表达式。BINARY_CHECKSUM 在计算中忽略具有不可比数据类型的表达式。

注释

按照表中任一行计算的 BINARY_CHECKSUM(*) 返回相同的值,只要随后未修改行。BINARY_CHECKSUM(*) 将为大多数(但不是全部)行更改返回不同的值,并可用于检测大多数行修改。

BINARY_CHECKSUM 可应用于表达式列表,并为指定列表返回相同的值。如果任意两个表达式列表的对应元素具有相同的类型和字节表示形式,则对这两个列表应用的 BINARY_CHECKSUM 将返回相同的值。对于此定义,指定类型的 Null 值被认为具有相同的字节表示形式。

BINARY_CHECKSUM 和 CHECKSUM 具有相似的功能:它们可用于计算表达式列表上的校验值,且表达式的顺序将影响结果值。用于 BINARY_CHECKSUM(*) 的列顺序是在表或视图定义中指定的列顺序。其中包括计算列。

CHECKSUM 和 BINARY_CHECKSUM 仅为字符串数据类型返回不同的值,这类字符串的区域设置可能导致具有不同表示形式的字符串进行等值比较。字符串数据类型为 char、varchar、nchar、nvarchar 或 sql_variant(如果 sql_variant 的基类型为字符串数据类型)。例如,字符串“McCavity”和“Mccavity”的 BINARY_CHECKSUM 值不同。反之,在不区分大小写的服务器中,上述字符串的 CHECKSUM 返回相同的校验值。CHECKSUM 值不应与 BINARY_CHECKSUM 值进行比较。

示例

以下示例使用 BINARY_CHECKSUM 检测表的行中的更改。

USE AdventureWorks2008R2;
GO
CREATE TABLE myTable (column1 int, column2 varchar(256));
GO
INSERT INTO myTable VALUES (1, 'test');
GO
SELECT BINARY_CHECKSUM(*) from myTable;
GO
UPDATE myTable set column2 = 'TEST';
GO
SELECT BINARY_CHECKSUM(*) from myTable;
GO