Sério -
VARCHAR(MAX)
pode armazenar até 2 GB de dados - não apenas 8000 caracteres..... Tente isto:
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)
Isso retornará um valor maior de 8.000 caracteres após 1.000 iterações.
O ponto é:se você estiver usando
varchar(max)
, você precisa sempre transmitir todas as suas strings para varchar(max)
explicitamente - como fiz neste exemplo. Caso contrário, o SQL Server retornará ao varchar
"regular" processamento, e isso é realmente limitado a 8000 caracteres....