SQL Server 2008のVARBINARY(MAX)フィールドからすべてのイメージをファイルシステムにダンプする方法は?

StackOverflow https://stackoverflow.com/questions/613154

質問

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で機能する希望。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top