Задать вопрос
@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к символов при создании хэша?
  • Вопрос задан
  • 1085 просмотров
Подписаться 2 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
tsklab
@tsklab Куратор тега SQL Server
Здесь отвечаю на вопросы.
Для SQL Server 2017 это ограничение снято (документация). Для предыдущих версий можно использовать CHECKSUM или написать функцию самому.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы