web-dev-qa-db-ja.com

SQL Serverで画像列をファイルにエクスポートする方法

データベースから移行します。ファイルシステムのバイナリファイルにエクスポートするimageタイプの列が1つあります。レコードごとに1つのファイル。 SQL Serverでこれを行うにはどうすればよいですか?

14
Jonas

これは私が思いついた解決策です:

  1. 有効にするxp_cmdshell

    EXEC sp_configure 'show advanced options', 1
    GO
    RECONFIGURE
    GO
    EXEC sp_configure 'xp_cmdshell', 1
    GO
    RECONFIGURE
    GO
    
  2. 必要に応じて、xp_cmdshell必要な権限を取得します。

    EXEC master..xp_cmdshell 'mkdir C:\exportdir'
    
  3. QueryoutでBCPを使用する

    EXEC master..xp_cmdshell 'BCP "SELECT column_of_type_image FROM **your_db WHERE id = 1 " queryout "C:\exportdir\yourfile.pdf" -T -N'
    

** your_dbは完全修飾テーブル名、つまり[Yourdb]。[YourSchema]。[YourTable]でなければなりません

14
Jonas

すべてのファイルの先頭にも追加の4バイトが追加されるという同じ問題がありました。 bcpコマンドで-Nオプションを使用する代わりに、それを-C RAWに変更しました。これを行うと、bcpに次の質問が表示されます。

フィールドのファイルストレージタイプを入力してくださいFileData [image]:
フィールドのプレフィックス長を入力してくださいFileData [4]:
フィールドの長さを入力してくださいFileData [0]:
フィールドターミネータを入力[なし]:
この形式情報をファイルに保存しますか? [はい/いいえ] 

これを修正するために、SQLサーバーのルートにテキストファイル(i.txt)を作成しました。このファイルには、これらのそれぞれに応答するための次の行が含まれています。

 I 
 0 
 0 
 
 n 

その後、私のEXEC bcp行は次のようになりました。

 EXEC master..xp_cmdshell 'BCP "SELECT column_of_type_image FROM ** your_db WHERE id = 1" queryout "C:\ exportdir\yourfile.pdf" -T -C RAW <C:\ i.txt' 

これにより、余分な文字なしでファイルがエクスポートされました。

10
Jacob Dababneh

エクスポートしたいファイルの種類(pdf、xls、doc、xmlなど)が保存されているIMAGE列をエクスポートするソリューションを探していました。

回答のアプローチはPDFファイルに対してのみ機能しました。すべての種類のファイルをエクスポートするには、ソリューションを次のように調整する必要がありました。

(1.)フォーマットテンプレートファイルを作成します。

Declare @sql varchar(500); 
Declare @sql varchar(500); 
SET @sql = 'bcp db.dbo.ImgTable format nul -T -n -f C:\tmp\export.fmt -S ' + @@SERVERNAME; 
select @sql;  
EXEC master.dbo.xp_CmdShell @sql; 

(2.)作成したエクスポート形式ファイルを開き、そのように編集します。

10.0
1
1       SQLIMAGE            0       0       ""   1     img_col                                     ""

次に、エクスポートコマンドを実行します。

EXEC master..xp_cmdshell 'BCP "SELECT IMG_COL FROM db.dbo.ImgTable WHERE id = ''CAB240C0-0068-4041-AA34-0000ECB42DDD'' " queryout "C:\tmp\myFile.xml" -T -f C:\tmp\export.fmt -S '

(3.)このエラーに遭遇した場合(私がしたように):

「[Microsoft] [SQL Native Client] Host-fileカラムは、サーバーにコピーする場合にのみスキップできます」

次のことを確認してください。

  • 2行目の編集を忘れずに、ここにエントリ数を入力してください(このシナリオでは1)。
  • 最終行の最後にCRLFがあることを確認してください。これがないと機能しませんでした。

この後、エラーなしでWordのIMAGE列ファイルをエクスポートします。

1.と2.の賛辞はすべて、次の質問の答えに行きます: ファイル/ 24006947#24006947

2
Magier

GUIソリューションに問題がない場合は、SSMS用の非常に優れたアドイン SSMSBoost があり、便利な機能が多数提供されています。もちろん、SQLに保存されている画像をプレビューする最も簡単な方法(少なくとも私の意見では)

[〜#〜]注[〜#〜]:このアドインをインストールした後、SSMSを再起動する必要があります。

それをインストールして、次の方法で画像のプレビューをお楽しみください:RightClick> Visualize As> Picture

1
ABS
EXEC master..xp_cmdshell 'mkdir D:\Project\Member\Images'

コマンドはONE LINE-SINGLE LINEのままにしてください!!!

SET @Command = 'bcp "SELECT Member_Picture FROM dbserver.[Member_Image] WHERE memberId = 1 " queryout "D:\Project\Member\Images\member1.jpg" -T -N ' 
PRINT @Command -- debugging
EXEC xp_cmdshell   @Command
GO
0
ARYA