2

IDENTITYフィールドとフィールドを持つテーブルがありますVARBINARY(MAX)VARBINARY(MAX)各フィールドの内容をファイルシステムにダンプする方法はありますか(例: 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...

これにアプローチする最良の方法は何ですか?

4

2 に答える 2

9

この記事のおかげで理解できました...

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

注意してください -> BCP コマンドには、フォーマット ファイルが必要です。これはファイルの内容で、c:\Temp に配置しました (上記の BCP コマンドラインで説明したように)。

10.0
1
1       SQLIMAGE            0       0       ""   1     OriginalImage                      ""

そのフォーマットファイルに関する最後の注意..最後の行の後に新しい行が必要です。そうしないと、エラーが発生します。

楽しみ!

于 2009-03-20T05:12:45.593 に答える
0

(私にとって) 最も簡単な方法は、varbinary フィールドをファイルにダンプする小さな .NET アプリケーションを作成することです。

.NET での作業に反対している場合は、"VARBINARY(MAX) FILESTREAM" 型の新しい列を作成できるはずです (私はこれをテストしていません)。また、対応する「ROWGUIDCOL」列があることを確認してください。次に、(理論的には)次のようなことができます。

UPDATE テーブル SET varfilestream_col = varbinary_col

それがうまくいくことを願っています。

于 2009-03-05T00:46:49.150 に答える