8

SQL Server 2008 R2 で varbinary(max) を使用して挿入できるファイルの最大サイズはどれくらいですか? 列の最大値を 8,000 バイト以上に変更しようとしましたが、変更できないため、最大は 8,000 バイトであると推測していますが、MSDNのこの記事から、最大ストレージ サイズは 2 であると表示されています^31-1 バイト:

varbinary [ ( n |最大) ]

可変長バイナリ データ。n は 1 ~ 8,000 の値です。maxは、最大ストレージ サイズが 2^31-1 バイトであることを示します。格納サイズは、入力されたデータの実際の長さ + 2 バイトです。入力するデータの長さは 0 バイトです。varbinaryの ANSI SQL シノニムは、バイナリ可変です。

では、どうすればより大きなファイルを varbinary フィールドに保存できますか? 保存したいファイルは 200kb から最大 1mb までなので、FILESTREAM の使用は考えていません。使用しているコードは次のとおりです。

UPDATE [table]
SET file = ( SELECT * FROM OPENROWSET ( BULK 'C:\A directory\A file.ext', SINGLE BLOB)    alias) 
WHERE idRow = 1

8000 バイト以下のファイルに対して、そのコードを正常に実行できました。8001 バイトのサイズのファイルで試してみると、失敗します。テーブルのファイル フィールドには、「ファイル」タイプと呼ばれるフィールドがあり、前述のとおりvarbinary(8000)、より大きな値に変更することはできません。

4

3 に答える 3

15

このシナリオを再現できません。私は次のことを試しました:

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 に制限されている場合、次のいずれかが当てはまると思います。

  1. 列は実際にはVARBINARY(8000).

  2. Management Studio でデータを選択し、そこに表示されるデータの長さを分析しています。これは、テキストへの結果で最大 8192 文字に制限されているためDATALENGTH()、列に対して直接使用する方がはるかに優れた方法です。

于 2012-08-23T00:15:14.377 に答える
1

あえて言うと、次の情報に基づいて、1 MB を超えるファイルにはファイル ストリームを使用します 。ファイルストリームの概要.

SQL Server では、BLOB はvarbinary(max)テーブルにデータを格納する標準データ、またはFILESTREAM varbinary(max)ファイル システムにデータを格納するオブジェクトです。データのサイズと用途によって、データベース ストレージとファイル システム ストレージのどちらを使用するかが決まります。次の条件に該当する場合は、 の使用を検討する必要がありますFILESTREAM

  • 格納されているオブジェクトは、平均して 1 MB を超えています。
  • 高速読み取りアクセスが重要です。
  • アプリケーション ロジックに中間層を使用するアプリケーションを開発しています。

小さいオブジェクトの場合、varbinary(max)BLOB をデータベースに格納すると、多くの場合、ストリーミング パフォーマンスが向上します。

于 2012-08-28T02:37:50.280 に答える