Команда PRINT
определенно ограничена 8000 символов, независимо от длины вывода (или от того, является ли она varchar (max)).Чтобы обойти это, вам нужно вывести строку в виде кусков <8000
символов
Обновление: в ответ на ваши изменения exec не ограничивает длину строки.Я собрал следующий пример, чтобы показать это:
DECLARE @str VARCHAR (MAX);
;WITH CTE_Count AS
(
select counter = 1
union all
select counter = counter+1
from CTE_Count
Where counter < 2000
)
SELECT
@str=COALESCE(@str + CHAR (10) ,
'' ) + 'select value=' + CAST (counter AS VARCHAR)
from
CTE_Count
Option (MAXRECURSION 0)
PRINT len(@str);--SELECT @str;
exec (@str)
Выполнение этого печатает длину как 34892 символа, и все 2000 операторов execute выполняются (будьте осторожны, это может занять несколько минут!)