REPLICATE
zwraca typ wejścia niezależnie od późniejszego przypisania. To denerwujące, ale aby uniknąć cichego obcinania, spróbuj:
SET @x = REPLICATE(CONVERT(VARCHAR(MAX), 'a'), 10000);
Dzieje się tak, ponieważ SQL Server wykonuje REPLICATE
operacja, zanim weźmie pod uwagę, do czego ją przypisujesz lub do ilu znaków próbujesz ją rozszerzyć. Dba tylko o wyrażenie wejściowe, aby określić, co powinno zwrócić, a jeśli dane wejściowe nie są typem max, zakłada, że mają zmieścić się w 8000 bajtów. Jest to wyjaśnione w Books Online
: