为了账号安全,请及时绑定邮箱和手机立即绑定

varchar(max)变量的最大大小

varchar(max)变量的最大大小

jeck猫 2019-10-30 11:14:48
在过去的任何时候,如果有人问我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)


查看完整回答
反对 回复 2019-10-30
?
慕沐林林

TA贡献2016条经验 获得超9个赞

我这里有些犹豫,因为将值存储在变量中与将其存储在列中不同。您是否想用一列尝试这样做?还是有更新?varchar只要您不尝试将其放在变量或varchar列中,甚至SQL Server 2000的文字字符串中的值都可以超过8000个字符

查看完整回答
反对 回复 2019-10-30
  • 3 回答
  • 0 关注
  • 1412 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信