Строковые или двоичные данные будут усечены при сохранении изображений base64 - PullRequest
0 голосов
/ 11 мая 2018

С уважением, пожалуйста, не отвечайте на это, сказав, что длина моего поля недостаточно велика. Это не вариант. И с уважением, пожалуйста, не отвечайте на это, говоря мне, что sp_executesql не может принимать входные данные более 2K. Это также не тот случай.

Моя проблема : Я отправляю запрос, используя sp_executesql, где я вставляю изображения в кодировке base64 в поле nvarchar (max). В некоторых случаях я получаю следующую ошибку:

строка или двоичные данные будут усечены. Заявление было прекращено.

У меня есть примеры, когда текст (который включает несколько изображений в кодировке base64) превышает 5 мегабайт. Это также увеличивает длину sp_executesql за 5 мегабайт. Иногда это работает. И у меня есть примеры, где я включил очень маленькие изображения в кодировке base64. Опять же иногда они работают.

Мое рабочее предположение : Кажется, что sp_executesql обнаружил некоторую последовательность символов в кодированном base64 тексте, которая заставляет сервер SQL выдавать ошибку «будет усечена».

Мой вопрос : Существует ли какой-либо метод кодирования моего текста, чтобы предотвратить взрыв SQL при выполнении оператора вставки / обновления?

Ограничения : Я использую CRM с открытым исходным кодом, поэтому я хотел бы вообще не заменять процедуры вставки / обновления. Но я согласен с изменением способа кодирования данных, отправляемых с помощью существующих процедур.

Любая помощь будет принята с благодарностью. Я в тупике!

1 Ответ

0 голосов
/ 11 мая 2018

Мое решение : я изменил nvarchar (4000) на nvarchar (max) в моей таблице аудита, которая была обновлена ​​триггером.

Подробности : я пренебрегалпроверить наличие триггеров в моей CRM с открытым исходным кодом.Всякий раз, когда обновление отправлялось в MY_TABLE, триггер создавал запись в MY_TABLE_AUDIT.

Поле, выбрасывающее ошибку, было определено как nvarchar (max) в MY_TABLE и nvarchar (4000) в MY_TABLE_AUDIT.Когда я изменил nvarchar (4000) на nvarchar (max), триггер сработал, и я смог сохранить свои изображения.

Так как же текстовое поле размером 5 мегабайт попало в базу данных?Это должно было произойти при начальной вставке, которая не запускала триггер, или при импорте исторических данных с отключенным триггером.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...