Поделиться через


BINARY_CHECKSUM (Transact-SQL)

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure конечную точку аналитики SQL Azure Synapse Analytics в хранилище Microsoft Fabric в Microsoft Fabric

Возвращает двоичное значение контрольной суммы, вычисленное для строки таблицы или для списка выражений.

Соглашения о синтаксисе Transact-SQL

Синтаксис

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

Примечание.

Этот синтаксис не поддерживается бессерверным пулом SQL в Azure Synapse Analytics.

Аргументы

*
Указывает, что вычисление выполняется для всех столбцов таблицы. При выполнении функции BINARY_CHECKSUM столбцы с несопоставимыми типами данных игнорируются. Перечень несопоставимых типов данных

  • курсор
  • Изображение
  • ntext
  • text
  • xml

А также несопоставимые определяемые пользователем типы среды CLR.

выражение
Выражение любого типа данных. При выполнении функции BINARY_CHECKSUM выражения с несопоставимыми типами данных игнорируются.

Типы возвращаемых данных

int

Замечания

Результат, возвращаемый функцией BINARY_CHECKSUM(*) для строки таблицы, изменяется только при изменении указанной строки. BINARY_CHECKSUM удовлетворяет свойствам хэш-функции. Функция, примененная к двум любым спискам выражений, возвращает одинаковое значение, если при сравнении оператором равенства (=) соответствующие элементы двух списков имеют одинаковый тип и равны. Для данного определения значения NULL указанного типа рассматриваются при сравнении как равные. Если хотя бы одно из значений в списке выражений меняется, то обычно меняется и контрольная сумма выражений. Но такие изменения не гарантируются. Поэтому, чтобы определить факт изменения значений, рекомендуется использовать функцию BINARY_CHECKSUM только в том случае, если в вашем приложении допускается случайный пропуск изменений. В противном случае рекомендуется вместо этого использовать функцию HASHBYTES. Когда указан хэш-алгоритм MD5, вероятность возвращения функцией HASHBYTES одинакового результата для двух различных входных параметров намного ниже, чем при использовании BINARY_CHECKSUM.

Функция BINARY_CHECKSUM может применяться к списку выражений, причем ее результаты для данного списка совпадают. Функция BINARY_CHECKSUM вернет одинаковый результат для двух любых списков выражений в том случае, если тип и байтовое представление соответствующих друг другу элементов списков совпадают. В данном случае значения NULL одинакового типа рассматриваются как значения с одинаковым байтовым представлением.

Функции BINARY_CHECKSUM и CHECKSUM похожи. Они могут быть использованы для вычисления контрольной суммы списка выражений, при этом порядок следования выражений влияет на значение результата. Порядок столбцов, используемый с BINARY_CHECKSUM(*), является порядком столбцов, указанным в таблице или определении представления. Такой порядок включает вычисляемые столбцы.

Функции BINARY_CHECKSUM и CHECKSUM возвращают различные значения для строковых типов данных, в которых из-за языкового стандарта строки с различными представлениями могут оказаться эквивалентными. Строковые типы данных

  • char
  • nchar
  • nvarchar
  • varchar

or

  • sql_variant (если базовым типом для sql_variant является строковый тип данных).

Например, для строк McCavity и Mccavity функция BINARY_CHECKSUM возвращает разные значения. Однако при использовании функции CHECKSUM на сервере, нечувствительном к регистру, значения контрольных сумм для данных строк совпадают. Следует избегать сравнения значения CHECKSUM со значением BINARY_CHECKSUM.

Функция BINARY_CHECKSUM поддерживает любую длину типа varbinary(max) и до 255 символов типа nvarchar(max).

Примеры

В этом примере для выявления изменений в строке таблицы используется функция BINARY_CHECKSUM.

USE AdventureWorks2022;  
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  

См. также

Агрегатные функции (Transact-SQL)
CHECKSUM_AGG (Transact-SQL)
КОНТРОЛЬНАЯ СУММА (Transact-SQL)
HASHBYTES (Transact-SQL)