2017-02-15 12 views
1

При вызове HASHBYTES с длинной строкой я получаюВычислить MD5 для длинной строки

Msg 8152, Level 16, State 10, Line 11 
String or binary data would be truncated. 

Я пытаюсь вычислить хеш MD5 для нескольких полей вместе, так что я могу сравнивать объекты,
Есть в любом случае вокруг этого ?

+1

Возможно, вы сможете поделиться своим кодом? Это сообщение об ошибке из вставки. AFAIK нет предела длине ввода MD5. Я просто попробовал его с огромным количеством ввода, и он отлично работает. –

+1

Из [документации] (https://msdn.microsoft.com/en-us/library/ms174415.aspx) существует ограничение на возвращаемое значение 8000 байт. Если ваш ввод приведет к тому, что это будет превышено, вам может быть не повезло. Но действительно ли вам нужно использовать столько полей для вычисления хэш-кода? –

+1

@SeanLange Максимальный размер возврата составляет 8K, q.v. мой комментарий выше. –

ответ

1

Предполагая, что вы используете SQL Server 2008 или выше, используйте функцию CHECKSUM.

https://msdn.microsoft.com/en-us/library/ms189788.aspx

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

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