在过去的任何时候,如果有人问我 varchar(max)
的最大大小,我会说2GB,或者查找更精确的 图表(2 ^ 31-1,或2147483647)。
然而,在最近的一些测试中,我发现 varchar(max)
变量显然可以超过这个大小:
create table T (
Val1 varchar(max) not null
)
go
declare @KMsg varchar(max) = REPLICATE('a',1024);
declare @MMsg varchar(max) = REPLICATE(@KMsg,1024);
declare @GMsg varchar(max) = REPLICATE(@MMsg,1024);
declare @GGMMsg varchar(max) = @GMsg + @GMsg + @MMsg;
select LEN(@GGMMsg)
insert into T(Val1) select @GGMMsg
select LEN(Val1) from T
结果:
(no column name)
2148532224
(1 row(s) affected)
Msg 7119, Level 16, State 1, Line 6
Attempting to grow LOB beyond maximum allowed size of 2147483647 bytes.
The statement has been terminated.
(no column name)
(0 row(s) affected)
那么,既然我现在知道了 变量可以超过2GB 的界限——有人知道 varchar(max)
变量的实际限制是什么吗?
(上面的测试是在 SQLServer2008(不是 R2)上完成的。我想知道它是否适用于其他版本)