データベースから移行します。ファイルシステムのバイナリファイルにエクスポートするimage
タイプの列が1つあります。レコードごとに1つのファイル。 SQL Serverでこれを行うにはどうすればよいですか?
これは私が思いついた解決策です:
有効にするxp_cmdshell
と
EXEC sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
EXEC sp_configure 'xp_cmdshell', 1
GO
RECONFIGURE
GO
必要に応じて、xp_cmdshell
必要な権限を取得します。
EXEC master..xp_cmdshell 'mkdir C:\exportdir'
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]でなければなりません
すべてのファイルの先頭にも追加の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'
これにより、余分な文字なしでファイルがエクスポートされました。
エクスポートしたいファイルの種類(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カラムは、サーバーにコピーする場合にのみスキップできます」
次のことを確認してください。
この後、エラーなしでWordのIMAGE列ファイルをエクスポートします。
1.と2.の賛辞はすべて、次の質問の答えに行きます: ファイル/ 24006947#24006947
GUIソリューションに問題がない場合は、SSMS用の非常に優れたアドイン SSMSBoost があり、便利な機能が多数提供されています。もちろん、SQLに保存されている画像をプレビューする最も簡単な方法(少なくとも私の意見では)
[〜#〜]注[〜#〜]:このアドインをインストールした後、SSMSを再起動する必要があります。
それをインストールして、次の方法で画像のプレビューをお楽しみください:RightClick> Visualize As> Picture
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