@zhaar

Как посчитать hash длинной строки в MSSQL?

Есть табличка, которая используется для формирования html-файлов из базы через BCP. Размеры формируемых файлов варьируются в разбросе 2-15 КБ. Весь html код для файлов хранится в одном поле varchar(max). Т.е. 1 строка = 1 выгружаемый файл
Файлы прикрепляются в другой сервис как вложения, а итоговым результатом получается некое сообщение, состоящее из шапки сообщения (туда доступ есть) и сформированного вложения (доступа уже нет).
Чтобы каждый раз не гонять по 20-30к строк, каждый раз выгружая одни и те же значения, в голову пришла мысль формировать хэш из содержимого вложения и его же писать в шапку сообщения.
На этапе формирования сообщений проверять, есть ли в шапках сообщения нужны хэш, сравнивать его с хэшем содержимого html-файла и выгружать только те записи, которые отсутствуют, либо изменились.

На тестовых данных, которые содержали около 8к символов, проблем не возникло, однако когда запрос наткнулся на бОльшую длину строки, то словил ошибку
Msg 8152, Level 16, State 10, Line 9
String or binary data would be truncated.

Сам запрос, которым генерировал хэш простой:
SELECT HASHBYTES('SHA1', html) FROM tbl1

Вопрос - как обойти ограничение в 8к символов при создании хэша?
  • Вопрос задан
  • 72 просмотра
Пригласить эксперта
Ответы на вопрос 1
tsklab
@tsklab
Здесь отвечаю на вопросы.
Для SQL Server 2017 это ограничение снято (документация). Для предыдущих версий можно использовать CHECKSUM или написать функцию самому.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Hunt4You Севастополь
от 60 000 до 120 000 руб.
GANDIVA Нижний Новгород
от 70 000 до 150 000 руб.
TR-Project Краснодар
До 200 000 руб.
24 июн. 2019, в 18:52
40000 руб./за проект
24 июн. 2019, в 18:44
5000 руб./за проект
24 июн. 2019, в 17:46
5000 руб./за проект