12

この質問が既にされている場合は申し訳ありませんが、どこにも見つかりませんでした。ファイルを BLOB として格納するテーブルがあります。ファイルを保持する列は画像データ型です。列からバイナリ データを抽出し、実際のファイルに変換できるようにしたいと考えています。できれば、BCP や管理スタジオでこれを実現したいと考えています。

BCP を試してみましたが、何らかの理由で Office ドキュメントを取り出そうとすると、Word が破損していると認識します。これが私がこれまでに試したことです(明らかに、罪のない人を保護するために値が変更されています:):

bcp "select document_binary_data from database where id = 12345" queryout "c:\filename.doc" -n -S server -U username -P password

しかし、これは機能していませんか?何かご意見は?

編集-n native フラグは必要ないことがわかりました。また、BCP はデフォルトで画像列に 4 バイトのプレフィックスを含めようとします。実際には、これを 0 に設定する必要があります。

bcp "select document_binary_data from database where id = 12345" queryout "c:\filename.doc" -S server -U username -P password
フィールド document_binary [イメージ] のファイル ストレージ タイプを入力します。
フィールド document_binary [4] のプレフィックス長を入力してください: 0
フィールド document_binary [0] の長さを入力:
フィールド ターミネータを入力 [なし]:
4

2 に答える 2

26

SOが賞金を設定するように言っていることに腹を立てているので、私は自分の質問に答えています

-n native フラグは必要ないことがわかりました。また、BCP はデフォルトで画像列に 4 バイトのプレフィックスを含めようとします。実際には、これを 0 に設定する必要があります。

bcp "select document_binary_data from database where id = 12345" queryout "c:\filename.doc" -S server -U username -P password
フィールド document_binary [イメージ] のファイル ストレージ タイプを入力します。
フィールド document_binary [4] のプレフィックス長を入力してください: 0
フィールド document_binary [0] の長さを入力:
フィールド ターミネータを入力 [なし]:
于 2010-04-06T16:46:34.307 に答える
0

これを行うために C# / .NET コードを使用できる場合は、次の KB 記事が役立つ場合があります。

http://support.microsoft.com/kb/317016

どうやら、BCP とフォーマット ファイルを使用してこのようなことを行うことができますが、IIRC のフォーマット ファイルには、列から取得すると予想される正確なバイト数を事前に入力する必要があるため、非常に実用的ではありません。

選択できるもう 1 つのオプションは、2008 で FILESTREAM を使用することです。2008 にすぐに移行する予定がない場合は、ドキュメントをファイル システムに保存し、ドキュメントへのポインターをデータベースに保存します。はい、これには長所と短所がありますが、これまでのすべてのプロジェクトで選択した方法です。

于 2010-03-08T21:09:46.263 に答える