Wie alle unserer Bilder von einem VARBINARY (MAX) Feld in SQL Server 2008 auf das Dateisystem zu entleeren?
-
03-07-2019 - |
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?
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.