В любое время в прошлом, если бы кто-то спросил меня о максимальном размере для varchar(max)
, я бы сказал 2 ГБ или посмотрел более точный рисунок (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)
Итак, учитывая, что теперь я знаю, что переменная может превышать барьер 2 ГБ - кто-нибудь знает, каков фактический предел для переменной varchar(max)
?
(выше тест завершен на SQL Server 2008 (не R2). Мне было бы интересно узнать, относится ли оно к другим версиям)