Geçmişte herhangi bir zamanda, birisi bana a için maksimum boyutu sormuş varchar(max)
olsaydı, 2GB derdim veya daha kesin bir rakama bakardım (2 ^ 31-1 veya 2147483647).
Bununla birlikte, son zamanlarda yapılan bazı testlerde, varchar(max)
değişkenlerin görünüşte bu boyutu aşabileceğini keşfettim :
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
Sonuçlar:
(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)
Öyleyse, artık bir değişkenin 2GB bariyerini aşabileceğini bildiğime göre - bir değişken için gerçek sınırın ne olduğunu bilen var varchar(max)
mı?
(Yukarıdaki test SQL Server 2008'de tamamlandı (R2 değil). Diğer sürümler için geçerli olup olmadığını bilmek isterim)
declare @x varchar(max) = 'XX'; SELECT LEN(REPLICATE(@x,2147483647))
4294967294
bana veriyor ama koşması uzun zaman alıyor -SELECT
geri döndükten sonra bile, bu yüzden fazladan ne kadar zaman harcandığından emin değilim.