SQL Server 2000 僅支援 VARCHAR(8000),超過 8KB 必須用 TEXT/IMAGE。但 TEXT 不支援 REPLACE、SUBSTRING、CHARINDEX 等字串函數,更新局部內容需使用晦澀的 READTEXT/WRITETEXT/UPDATETEXT,開發極不便。
VARCHAR(MAX)、NVARCHAR(MAX)、VARBINARY(MAX) 最高 2 GB,相容所有內建字串/二進位函數。DECLARE @BigString VARCHAR(MAX); SET @BigString = 'abc';REPLACE、LEFT、SUBSTRING 等函數。指定長度類型(如 VARCHAR(4001))不會自動升級 為 MAX。串連時若兩邊皆為指定長度,結果仍受 8000 限制:
DECLARE @S1 VARCHAR(4001) = REPLICATE('1',4001);
DECLARE @S2 VARCHAR(4001) = REPLICATE('2',4001);
SELECT LEN(@S1 + @S2); -- 8000,非 8002
修正:任一邊宣告為 VARCHAR(MAX) 或 CAST(@S1 AS VARCHAR(MAX)),優先規則會將結果型別提升為 MAX,得到正確長度 8002。