過去のいつでも、誰かにの最大サイズを尋ねられたら、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
が戻った後でも、その余分な時間が何に費やされているかわかりません。