Can I set 2 MB for maximum size of varbinary?

2019-07-10 02:32发布

As far as I know the maximum value you can define "manually" is 8000 -> varbinary(8000) which, as far as I know, means 8000 bytes -> 7,8125 KByte.

Is it possible to set max to 2 MB? Something ike varbinary(2097152), or shall I set it to varbinary(max) and check the file size through my upload/sql insert script?

2条回答
啃猪蹄的小仙女
2楼-- · 2019-07-10 02:48

You could use a CHECK CONSTRAINT to ensure the size is below 2MB:

CREATE TABLE dbo.T
(
    ID INT IDENTITY,
    VarB VARBINARY(MAX)
);

ALTER TABLE dbo.T ADD CONSTRAINT CHK_T_VarB__2MB CHECK (DATALENGTH(VarB) <= 2097152);

Then when trying to insert something larger than 2 MB:

DECLARE @B VARCHAR(MAX) = '|';
INSERT dbo.T (VarB)
SELECT CONVERT(VARBINARY(MAX), REPLICATE(@B, 2097153));

You get an error:

The INSERT statement conflicted with the CHECK constraint "CHK_T_Column__2MB". The conflict occurred in database "TestDB", table "dbo.T", column 'VarB'.

查看更多
小情绪 Triste *
3楼-- · 2019-07-10 02:49

There is no provision to specify varbinary(2097152), Once if you cross 8000 bytes,you should go for max keyword only.

It will consume only the memory you need (in your case it is 2MB) and it will store upto 2GB at max.

varbinary(max) = 2 gigabytes.
查看更多
登录 后发表回答