REPLICATE
trả về kiểu đầu vào bất kể việc gán sau này. Thật khó chịu, nhưng để tránh bị cắt ngắn một cách im lặng, hãy thử:
SET @x = REPLICATE(CONVERT(VARCHAR(MAX), 'a'), 10000);
Điều này là do SQL Server thực hiện REPLICATE
hoạt động trước khi nó xem xét bạn đang gán nó cho cái gì hoặc bạn đang cố gắng mở rộng nó ra bao nhiêu ký tự. Nó chỉ quan tâm đến biểu thức đầu vào để xác định những gì nó sẽ trả về và nếu đầu vào không phải là loại tối đa, nó giả định rằng nó có nghĩa là vừa với 8.000 byte. Điều này được giải thích trong Sách Trực tuyến
: