我可以为 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'.