web-dev-qa-db-ja.com

単純な挿入ステートメントを使用して、バイナリファイルデータをバイナリSQLフィールドに挿入するにはどうすればよいですか?

image列を含むテーブルを持つSQL Server 2000があります。

ファイルのパスを指定して、その列にファイルのバイナリデータを挿入するにはどうすればよいですか?

CREATE TABLE Files
(
  FileId int,
  FileData image
)
58
scottm

リテラルを使用する場合、バイナリ文字列を作成するだけです。

insert into Files (FileId, FileData) values (1, 0x010203040506)

そして、FileDataフィールドに6バイトの値を持つレコードがあります。


コメントで、ファイル名のみを指定することを指定します。これは、SQL Server 2000(または私が知っている他のバージョン)では実行できません。

SQL Server 2005/2008でこれを行うCLRストアドプロシージャまたはファイル名を取得してからデータを挿入する(またはバイトを返す)拡張ストアドプロシージャが必要になります(ただし、必要な場合を除き、それを避ける必要があります)文字列ですが、それはかなり長い可能性があります)。


SP /クエリからのみデータを取得できるという問題に関しては、答えはイエスだと思います。なぜなら、SQL Serverにファイルシステムからファイルを読み取る機能を与えた場合、 Windows認証を介して接続されている場合、どのユーザーが権限を決定するために使用されますか?サービスを管理者として実行している場合(神の禁止)、許可されない権利の昇格が可能です。

51
casperOne

これはどこかに近いと思います。

_INSERT INTO Files
(FileId, FileData)
SELECT 1, * FROM OPENROWSET(BULK N'C:\Image.jpg', SINGLE_BLOB) rs
_

注意すべき点として、上記はSQL Server 2005およびSQL Server 2008でvarbinary(max)のデータ型で実行されます。データ型としてイメージでテストされていません。

95
Blithe