image
列を含むテーブルを持つSQL Server 2000があります。
ファイルのパスを指定して、その列にファイルのバイナリデータを挿入するにはどうすればよいですか?
CREATE TABLE Files
(
FileId int,
FileData image
)
リテラルを使用する場合、バイナリ文字列を作成するだけです。
insert into Files (FileId, FileData) values (1, 0x010203040506)
そして、FileDataフィールドに6バイトの値を持つレコードがあります。
コメントで、ファイル名のみを指定することを指定します。これは、SQL Server 2000(または私が知っている他のバージョン)では実行できません。
SQL Server 2005/2008でこれを行うCLRストアドプロシージャまたはファイル名を取得してからデータを挿入する(またはバイトを返す)拡張ストアドプロシージャが必要になります(ただし、必要な場合を除き、それを避ける必要があります)文字列ですが、それはかなり長い可能性があります)。
SP /クエリからのみデータを取得できるという問題に関しては、答えはイエスだと思います。なぜなら、SQL Serverにファイルシステムからファイルを読み取る機能を与えた場合、 Windows認証を介して接続されている場合、どのユーザーが権限を決定するために使用されますか?サービスを管理者として実行している場合(神の禁止)、許可されない権利の昇格が可能です。
これはどこかに近いと思います。
_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)
のデータ型で実行されます。データ型としてイメージでテストされていません。