我可以为 varbinary 的最大大小设置 2 MB 吗?
Can I set 2 MB for maximum size of varbinary?
据我所知,您可以定义的最大值 "manually" 是 8000
-> varbinary(8000)
,据我所知,这意味着 8000 bytes
-> 7,8125 KByte
.
是否可以将最大值设置为2 MB
?有点像 varbinary(2097152)
,或者我应该将它设置为 varbinary(max)
并通过我的 upload/sql 插入脚本检查文件大小?
没有规定指定varbinary(2097152),
如果你超过 8000 字节,你应该只使用 max 关键字。
它将仅消耗您需要的内存(在您的情况下为 2MB),最多可存储 2GB。
varbinary(max) = 2 gigabytes.
您可以使用 CHECK CONSTRAINT
来确保大小低于 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);
然后当尝试插入大于 2 MB 的内容时:
DECLARE @B VARCHAR(MAX) = '|';
INSERT dbo.T (VarB)
SELECT CONVERT(VARBINARY(MAX), REPLICATE(@B, 2097153));
你得到一个错误:
The INSERT statement conflicted with the CHECK constraint "CHK_T_Column__2MB". The conflict occurred in database "TestDB", table "dbo.T", column 'VarB'.
据我所知,您可以定义的最大值 "manually" 是 8000
-> varbinary(8000)
,据我所知,这意味着 8000 bytes
-> 7,8125 KByte
.
是否可以将最大值设置为2 MB
?有点像 varbinary(2097152)
,或者我应该将它设置为 varbinary(max)
并通过我的 upload/sql 插入脚本检查文件大小?
没有规定指定varbinary(2097152), 如果你超过 8000 字节,你应该只使用 max 关键字。
它将仅消耗您需要的内存(在您的情况下为 2MB),最多可存储 2GB。
varbinary(max) = 2 gigabytes.
您可以使用 CHECK CONSTRAINT
来确保大小低于 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);
然后当尝试插入大于 2 MB 的内容时:
DECLARE @B VARCHAR(MAX) = '|';
INSERT dbo.T (VarB)
SELECT CONVERT(VARBINARY(MAX), REPLICATE(@B, 2097153));
你得到一个错误:
The INSERT statement conflicted with the CHECK constraint "CHK_T_Column__2MB". The conflict occurred in database "TestDB", table "dbo.T", column 'VarB'.