CHECKSUM (Transact-SQL)

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

Применимо для следующих объектов: SQL Server (SQL Server 2008 по текущую версию), База данных SQL Windows Azure (С первоначального выпуска по текущий выпуск).

Значок ссылки на раздел Cинтаксические обозначения в Transact-SQL

Синтаксис

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

Аргументы

  • *
    Указывает на то, что вычисление производится по всем столбцам таблицы. Функция CHECKSUM возвращает ошибку, если какой-либо столбец содержит несопоставимый тип данных. Несопоставимыми типами данных являются text, ntext, image XML и cursor, а также sql_variant с любым из вышеперечисленных типов в качестве базового типа.

  • expression
    Выражение любого типа за исключением несопоставимого типа данных.

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

int

Замечания

Функция CHECKSUM вычисляет хэш-значение, которое называется контрольной суммой, из списка своих аргументов. Хэш-значение предназначено для построения хэш-индексов. Если аргументы функции CHECKSUM являются столбцами, а индекс построен на рассчитанном значении CHECKSUM, то в результате получится хэш-индекс. Он может использоваться для поиска равенств в столбцах.

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

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

Значение CHECKSUM зависит от параметров сортировки. Такое же значение, сохраненное с другими параметрами сортировки, возвратит другое значение CHECKSUM.

Примеры

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

-- Create a checksum index.
SET ARITHABORT ON;
USE AdventureWorks2012; 
GO
ALTER TABLE Production.Product
ADD cs_Pname AS CHECKSUM(Name);
GO
CREATE INDEX Pname_index ON Production.Product (cs_Pname);
GO

Индекс контрольной суммы может быть использован как хэш-индекс, особенно для ускорения индексации, если индексируемый столбец представляет собой длинный символьный столбец. Индекс контрольной суммы может быть использован для поиска равенств.

/*Use the index in a SELECT query. Add a second search 
condition to catch stray cases where checksums match, 
but the values are not the same.*/
SELECT * 
FROM Production.Product
WHERE CHECKSUM(N'Bearing Ball') = cs_Pname
AND Name = N'Bearing Ball';
GO

Создание индекса по вычисляемому столбцу материализует столбец контрольной суммы, и любые изменения для значения ProductName будут распространены на столбец контрольной суммы. Иным способом индекс мог бы быть построен непосредственно по индексируемому столбцу. Однако если ключевые значения длинные, то обычный индекс вряд ли будет работать так же хорошо, как индекс контрольной суммы.

См. также

Справочник

CHECKSUM_AGG (Transact-SQL)

HASHBYTES (Transact-SQL)

BINARY_CHECKSUM (Transact-SQL)