【发布时间】:2012-08-22 23:51:45
【问题描述】:
我可以在 SQL Server 2008 R2 中使用 varbinary(max) 插入的文件的最大大小是多少?我试图将列中的最大值更改为超过 8,000 字节,但它不会让我,所以我猜测最大值是 8,000 字节,但从 this article on MSDN 开始,它说最大存储大小是 2^ 31-1 字节:
varbinary [ ( n | max) ]
可变长度二进制数据。 n 可以是 1 到 8,000 之间的值。 max 表示最大存储大小为 2^31-1 字节。存储大小是输入数据的实际长度 + 2 个字节。输入的数据长度可以是 0 字节。 varbinary 的 ANSI SQL 同义词是 binary varying。
那么如何在 varbinary 字段中存储更大的文件?我不考虑使用 FILESTREAM,因为我要保存的文件最大为 200kb 到 1mb,我正在使用的代码:
UPDATE [table]
SET file = ( SELECT * FROM OPENROWSET ( BULK 'C:\A directory\A file.ext', SINGLE BLOB) alias)
WHERE idRow = 1
我已经能够成功地将该代码执行到小于或等于 8000 字节的文件。如果我尝试使用 8001 字节大小的文件,它将失败。我桌子上的文件字段有一个名为“文件”类型varbinary(8000) 的字段,正如我所说,我无法更改为更大的值。
【问题讨论】:
-
你是怎么尝试的?你能展示你用来做这个的代码和表的创建表结构吗?也没有
nvarbinary这样的东西。 -
对不起,我的意思是varbinary(max),我也添加了我使用的代码,非常感谢
-
您是否检查了兼容模式设置?
-
@PabloRomeo 即使兼容 80 (SQL Server 2000),您也可以创建并正确填充 varbinary(max)。兼容性级别设置会影响某些语法和解析,但不会影响数据类型或实际 DML 操作。
-
正如文档中明确指出的那样:要么指定
varbinary(n)并给出高达 8000 的特定数字 - 更多是不可能的; 或然后您将列或变量定义为varbinary(max),在这种情况下,它最多可以容纳 2 GB 的数据。
标签: sql-server sql-server-2008 sql-server-2008-r2 varbinary varbinarymax