Пользователь одной из наших баз данных пытается отправить запрос UPDATE в базу данных SQL Server 2005, и текст неожиданно усекается.
Усеченное поле имеет значение VARBINARY (MAX) и используется для хранения текста HTML.
Запрос примерно:
UPDATE Story
SET mainText = CONVERT (VARBINARY (MAX), '[...5000 chars of text...]'
+ char(47) + char(47)
+ '[...3000 chars of text...]'
+ char(47) + char(47)
+ '[...5000 chars of text...]')
WHERE storyId = 123456
После некоторых экспериментов я обнаружил, что при удалении конкатенации строк запрос работает, как и ожидалось, и поле не усекается.
Мне удалось обойти ограничение и сохранить конкатенацию, обернув каждую отдельную строку в CAST в VARCHAR (MAX), поэтому есть опция, если пользователь считает необходимым использовать char ().
Что я думаю, что происходит , так это то, что всякий раз, когда используется оператор конкатенации, происходит неявное преобразование в VARCHAR, и это неявное преобразование ограничивается VARCHAR (8000) вместо VARCHAR (MAX) , Таким образом, еще до того, как строка отправляется в функцию CONVERT, она уже усекается до 8000 символов.
Если я прав, есть ли способ изменить это поведение?
Если нет способа изменить поведение, есть ли другой способ решения проблемы, кроме CAST?