在过去的任何时候,如果有人问我a的最大大小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)
变量的实际限制是多少吗?
(以上测试已在SQL Server 2008(非R2)上完成。我想知道它是否适用于其他版本)
declare @x varchar(max) = 'XX'; SELECT LEN(REPLICATE(@x,2147483647))
给4294967294
我的钱,但是需要花费很长的时间-即使在SELECT
回来之后,也不能确定多余的时间在做什么。