web-dev-qa-db-ja.com

OPENROWSET、バイナリファイル、varcharおよびvarbinary

バイナリファイルをSQL Serverにアップロードする 、varbinaryフィールドにしようとしています。私はそれを行うためにこのクエリを思いついた:

INSERT INTO Files(File, Name)
SELECT
   "file.bin" AS Name
   * FROM OPENROWSET(BULK 'C:\file.bin', SINGLE_BLOB) AS File
GO

しかし、私はこのエラーを受け取ります:

データ型varcharからvarbinary(max)への暗黙的な変換は許可されていません。 CONVERT関数を使用して、このクエリを実行します。

私が正しく理解していれば、ファイルはバイナリでありながらテキスト(varchar)として読み取られ、varbinaryにバイナリとして保存する必要があります。その過程で破壊されるのではないかと思いますよね?そうでない場合でも、CONVERTメソッドを使用するにはどうすればよいですか?

1
pupeno

フィールドと同じ順序でデータを配置すると、データは機能しました(または少なくとも機能しているように見えます)。

INSERT INTO Files(File, Name)
SELECT
     * FROM OPENROWSET(BULK 'C:\file.bin', SINGLE_BLOB) AS File
     "file.bin" AS Name
GO
2
pupeno

私はこれを自分で行ったことがありませんが、 このページ jpgをvarbinariesに挿入する同じ手順を示しています...唯一の違いは、パス名の前のNとASスイッチがないことです

それが役立つことを願っていますが、おそらく変換と関係がある何かを見逃しています

0
Rodent43

なぜそれがvarchar列を返すのかわかりません。 msdnの例 と同じように見えます。

その列をどのように変換するのかわかりません。多分...

SELECT 
   convert(varbinary(max), * FROM OPENROWSET(BULK 'C:\file.bin', SINGLE_BLOB)) AS File

ただし、SINGLE_BLOBを指定すると、varcharであることにもっと関心があります。

0
dotjoe