Vážně - VARCHAR(MAX)
může uložit až 2 GB dat – nejen 8000 znaků......
Zkuste toto:
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)
Tím vrátíte hodnotu vyšší než 8000 znaků po 1000 iteracích.
Jde o to, že pokud používáte varchar(max)
, musíte se ujistit, že vždy odesíláte všechny vaše řetězce na varchar(max)
výslovně - jako jsem to udělal v tomto příkladu. V opačném případě se SQL Server vrátí k "běžnému" varchar
zpracování, a to je skutečně omezeno na 8000 znaků....