Wie alle unserer Bilder von einem VARBINARY (MAX) Feld in SQL Server 2008 auf das Dateisystem zu entleeren?

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

Frage

Ich habe eine Tabelle, die in ihm ein IDENTITY Feld und ein VARBINARY(MAX) Feld hat. Gibt es eine Möglichkeit, den Inhalt jedes VARBINARY(MAX) Feld Dump könnte das Dateisystem (zB. c:\temp\images)?

Tabellenschema:

PhotoId INTEGER NOT NULL IDENTITY
Image VARBINARY(MAX) NOT NULL
DateCreated SMALLDATETIME

Ausgabe:

c:\temp\images\1.png
c:\temp\images\2.png
c:\temp\images\3.png
... etc...

Was ist der beste Weg, um diesen Ansatz?

War es hilfreich?

Lösung

Ich habe es herausgefunden dank dieser Beitrag ...

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

Bitte beachten Sie -> u brauchen eine Formatdatei haben, für den BCP-Befehl. Dies ist der Inhalt der Datei und ich habe es in c gesetzt. \ Temp (wie oben in der BCP Kommandozeile angegeben)

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

Schlussbemerkung zu diesem Format Datei .. da hat eine neue Zeile nach der letzten Linie. sonst u wird eine Fehlermeldung angezeigt.

Genießen Sie!

Andere Tipps

Der einfachste (für mich) wäre eine wenig .NET-Anwendung zu schreiben, die die varbinary Felder zu einer Datei gespeichert.

Wenn Sie im Gegensatz zu in .NET arbeiten, dann sollten Sie (ich habe nicht getestet) Lage sein, eine neue Spalte vom Typ „VARBINARY (MAX) FILESTREAM“ zu erstellen. Seien Sie sicher, dass Sie haben auch eine die entsprechende „ROWGUIDCOL“ Spalte. Dann können Sie (theoretisch) so etwas wie:

UPDATE Tabelle SET varfilestream_col = varbinary_col

Hope, die für ya arbeitet.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top