在过去的任何时候,如果有人问我a的最大大小varchar(max),我都会说2GB,或者查找更精确的数字(2 ^ 31-1或2147483647)。但是,在最近的一些测试中,我发现varchar(max)变量显然可以超过此大小:create table T ( Val1 varchar(max) not null)godeclare @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 @GGMMsgselect LEN(Val1) from T结果:(no column name)2148532224(1 row(s) affected)Msg 7119, Level 16, State 1, Line 6Attempting 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)上完成。我想知道它是否适用于其他版本)
3 回答
狐的传说
TA贡献1804条经验 获得超3个赞
经过进一步调查,我最初的假设是declare @var datatype = value语法异常(错误?),这是不正确的。
由于不支持该语法,因此我为2005修改了脚本,然后在2008上尝试了修改后的版本。2005年,我收到了Attempting to grow LOB beyond maximum allowed size of 2147483647 bytes.错误消息。在2008年,修改后的脚本仍然成功。
declare @KMsg varchar(max); set @KMsg = REPLICATE('a',1024);
declare @MMsg varchar(max); set @MMsg = REPLICATE(@KMsg,1024);
declare @GMsg varchar(max); set @GMsg = REPLICATE(@MMsg,1024);
declare @GGMMsg varchar(max); set @GGMMsg = @GMsg + @GMsg + @MMsg;
select LEN(@GGMMsg)
慕沐林林
TA贡献2016条经验 获得超9个赞
我这里有些犹豫,因为将值存储在变量中与将其存储在列中不同。您是否想用一列尝试这样做?还是有更新?varchar
只要您不尝试将其放在变量或varchar
列中,甚至SQL Server 2000的文字字符串中的值都可以超过8000个字符
- 3 回答
- 0 关注
- 1412 浏览
添加回答
举报
0/150
提交
取消