SQL Server 2008のVARBINARY(MAX)フィールドからすべてのイメージをファイルシステムにダンプする方法は?
-
03-07-2019 - |
質問
IDENTITY
フィールドと VARBINARY(MAX)
フィールドを持つテーブルがあります。各 VARBINARY(MAX)
フィールドの内容を filesystem にダンプする方法はありますか(例: c:\ temp \ images
)
テーブルスキーマ:
PhotoId INTEGER NOT NULL IDENTITY
Image VARBINARY(MAX) NOT NULL
DateCreated SMALLDATETIME
出力:
c:\temp\images\1.png
c:\temp\images\2.png
c:\temp\images\3.png
... etc...
これにアプローチする最良の方法は何ですか?
解決
のおかげで理解できましたこの投稿 ...
SET NOCOUNT ON
DECLARE @IdThumbnail INTEGER,
@MimeType VARCHAR(100),
@FileName VARCHAR(200),
@Sqlstmt varchar(4000)
DECLARE Cursor_Image CURSOR FOR
SELECT a.IdThumbnail
FROM tblThumbnail a
ORDER BY a.IdThumbnail
OPEN Cursor_Image
FETCH NEXT FROM Cursor_Image INTO @IdThumbnail
WHILE @@FETCH_STATUS = 0
BEGIN
-- Generate the file name based upon the ID and the MIMETYPE.
SELECT @FileName = LTRIM(STR(@IdThumbnail)) + '.png'
-- Framing DynamicSQL for XP_CMDshell
SET @Sqlstmt='BCP "SELECT OriginalImage
FROM Appian.dbo.tblThumbnail
WHERE IdThumbnail = ' + LTRIM(STR(@IdThumbnail)) +
'" QUERYOUT c:\Temp\Images\' + LTRIM(@FileName) +
' -T -fC:\Temp\ImageFormatFile.txt'
print @FileName
print @sqlstmt
EXEC xp_cmdshell @sqlstmt
FETCH NEXT FROM Cursor_Image INTO @IdThumbnail
END
CLOSE Cursor_Image
DEALLOCATE Cursor_Image
注意してください-> u BCPコマンド用にフォーマットファイルが必要です。これはファイルの内容であり、c:\ Tempに配置しました(上記のBCPコマンドラインに記載されています)。
10.0
1
1 SQLIMAGE 0 0 "" 1 OriginalImage ""
その形式ファイルについての最後の注意..最終行の後に改行する必要があります。そうしないと、エラーが発生します。
お楽しみください
他のヒント
(私にとって)最も簡単なのは、varbinaryフィールドをファイルにダンプする小さな.NETアプリケーションを作成することです。
。対応する" ROWGUIDCOL"も用意してください。カラム。その後、(理論的には)次のようなことができます:
UPDATEテーブル SET varfilestream_col = varbinary_col
yaで機能する希望。
所属していません StackOverflow