REPLICATE
връща входния тип независимо от по-късно присвояване. Досадно е, но за да избегнете тихото съкращаване, опитайте:
SET @x = REPLICATE(CONVERT(VARCHAR(MAX), 'a'), 10000);
Това е така, защото SQL Server изпълнява REPLICATE
операция, преди да обмисли към какво го присвоявате или до колко знака се опитвате да го разширите. Той се интересува само от входния израз, за да определи какво трябва да върне, и ако входът не е максимален тип, той приема, че е предназначен да се побере в рамките на 8000 байта. Това е обяснено в Книги онлайн
: