问题
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?
回答1:
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'.
回答2:
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.
来源:https://stackoverflow.com/questions/34741079/can-i-set-2-mb-for-maximum-size-of-varbinary