Как сохранить строку var больше, чем varchar (max)?

Я пытаюсь сделать это:

DECLARE @myVar VARCHAR(MAX)
Loop with cursor
select @myVar = @myVar + bla bla bla
end loop

Когда цикл завершается, @myVar является неполным, содержащим только 8000 символов.

Я попытался использовать текст, но не разрешен для локальных vars.

Что было бы хорошим решением для этого случая?

xml var?

Я только что посмотрел эти сообщения:

Как передать строковый параметр больше, чем varchar (8000) в SQL Server 2000?

Проверьте, будет ли конкатенация к varchar (max) превышать максимально допустимые символы

И другие через Интернет.

С уважением.

Ответ 1

Серьезно - VARCHAR(MAX) может хранить до 2 ГБ данных - не только 8000 символов.....

Попробуйте следующее:

DECLARE @myVar VARCHAR(MAX) = ''

DECLARE @ix INT = 1

WHILE @ix < 1000
BEGIN
    set @myVar = @myVar + CAST('bla bla bla' AS VARCHAR(MAX))
    SET @ix = @ix + 1
END

SELECT DATALENGTH(@myvar)

Это возвращает значение выше, чем 8000 символов после 1000 итераций.

Дело в том, что если вы используете VARCHAR(MAX), вы должны всегда отличать все свои строки до VARCHAR(MAX) явно - как это было в этом примере. В противном случае SQL Server вернется к "правильной" обработке varchar, и это действительно ограничено 8000 символами....