Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server 2008 R2 Varbinary最大大小_Sql Server_Sql Server 2008_Sql Server 2008 R2_Varbinary_Varbinarymax - Fatal编程技术网

Sql server SQL Server 2008 R2 Varbinary最大大小

Sql server SQL Server 2008 R2 Varbinary最大大小,sql-server,sql-server-2008,sql-server-2008-r2,varbinary,varbinarymax,Sql Server,Sql Server 2008,Sql Server 2008 R2,Varbinary,Varbinarymax,在SQL Server 2008 R2中,我可以使用varbinary(max)插入的文件的最大大小是多少?我试图将列中的最大值更改为8000字节以上,但它不允许,因此我猜测最大值为8000字节,但从中,它表示最大存储大小为2^31-1字节: varbinary[(n|max)] 可变长度二进制数据。n可以是1到8000之间的值max表示最大存储大小为2^31-1字节。存储大小是输入的数据的实际长度+2字节。输入的数据长度可以是0字节。varbinary的ANSI SQL同义词是二进制变量 那么

在SQL Server 2008 R2中,我可以使用varbinary(max)插入的文件的最大大小是多少?我试图将列中的最大值更改为8000字节以上,但它不允许,因此我猜测最大值为8000字节,但从中,它表示最大存储大小为2^31-1字节:

varbinary[(n|max)]

可变长度二进制数据。n可以是1到8000之间的值max表示最大存储大小为2^31-1字节。存储大小是输入的数据的实际长度+2字节。输入的数据长度可以是0字节。varbinary的ANSI SQL同义词是二进制变量

那么,如何在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字节大小的文件,它将失败。我在表上的文件字段有一个名为“file”type
varbinary(8000)
的字段,正如我所说的,我不能将其更改为更大的值。

我无法重现这种情况。我尝试了以下方法:

USE tempdb;
GO

CREATE TABLE dbo.blob(col VARBINARY(MAX));

INSERT dbo.blob(col) SELECT NULL;

UPDATE dbo.blob 
  SET col = (SELECT BulkColumn 
    FROM OPENROWSET( BULK 'C:\Folder\File.docx', SINGLE_BLOB) alias
  );

SELECT DATALENGTH(col) FROM dbo.blob;
结果:

--------
39578
如果上限为8K,那么我猜以下任一项都是正确的:

  • 该列实际上是
    VARBINARY(8000)

  • 您正在ManagementStudio中选择数据,并分析其中显示的数据长度。如果是这种情况,则结果到文本的最大长度限制为8192个字符,因此直接对列使用
    DATALENGTH()
    是一种更好的方法


  • 我敢说,对于大于1MB的文件使用文件流是基于以下内容的:

    在SQL Server中,blob可以是标准的
    varbinary(max)
    数据,用于存储 表中的数据,或存储的
    FILESTREAM varbinary(max)
    对象 文件系统中的数据。数据的大小和使用决定了 您应该使用数据库存储还是文件系统存储。如果 下面的条件是正确的,您应该考虑使用<代码> FielestRAM< <代码>:

    • 正在存储的对象平均大于1 MB
    • 快速读取访问非常重要
    • 您正在开发使用中间层作为应用程序逻辑的应用程序
    对于较小的对象,在数据库中存储
    varbinary(max)
    blob 通常提供更好的流式传输性能

    “SET TEXTSIZE”指定
    varchar(max)
    nvarchar(max)
    varbinary(max)
    text
    ntext
    ,以及
    SELECT
    语句返回的图像数据的大小

    select @@TEXTSIZE
    
    SQL Server的SQL Server本机客户端ODBC驱动程序和SQL Server本机客户端OLE DB提供程序在连接时自动将
    TEXTSIZE
    设置为2147483647。
    SET TEXTSIZE
    的最大设置为2 GB,以字节为单位。设置为0会将大小重置为默认值(4 KB)


    如前所述,对于大文件,您应该更喜欢文件流。

    您是如何尝试的?能否显示用于执行此操作的代码以及该表的创建表结构?此外,没有
    nvarbinary
    。对不起,我指的是varbinary(max),我还添加了我使用的代码,非常感谢您检查了兼容模式设置吗?@PabloRomeo即使您处于80兼容状态(SQL Server 2000),您也可以创建并正确填充varbinary(max)。兼容性级别设置会影响某些语法和解析,但不会影响数据类型或实际的DML操作。正如文档中明确指出的那样:要么指定
    varbinary(n)
    ,要么指定一个最高8000的特定数字-不可能更多;或者,将列或变量定义为
    varbinary(max)
    ,在这种情况下,它最多可以容纳2GB的数据。