Wie exportiere ich eine Bildspalte in Dateien in SQL Server?
13
Ich werde von einer Datenbank migrieren. Es gibt eine Spalte vom Typ image, die ich in Binärdateien im Dateisystem exportieren möchte. Eine Datei für jeden Datensatz. Wie kann ich das mit SQL Server machen?
Ich habe den obigen Code ausprobiert und es hat tatsächlich funktioniert ... bis zu einem gewissen Punkt. Aus irgendeinem Grund enthält das JPG-Bild 4 vorangestellte Zeichen, die dazu führen, dass es ungültig wird. Ich habe diese mit einem Texteditor und voila entfernt ... JPG hat funktioniert. Irgendeine Idee, was diese 4 Charaktere sein könnten und wie man sie beim Export loswird? Sie sind:2B 90 01 00
Was ist der Typ der Spalte, aus der Sie exportiert haben?
Max Vernon
10
Ich hatte das gleiche Problem mit den zusätzlichen 4 Bytes, die am Anfang aller meiner Dateien hinzugefügt wurden. Anstatt die Option -N in meinem Befehl bcp zu verwenden, habe ich sie in -C RAW geändert. Wenn Sie dies tun, wird bcp mit den folgenden Fragen aufgefordert:
Geben Sie den Dateityp des Feldes FileData [Bild] ein:
Geben Sie die Präfixlänge des Feldes FileData [4] ein:
Geben Sie die Länge des Feldes FileData [0] ein:
Feldabschluss eingeben [keine]:
Möchten Sie diese Formatinformationen in einer Datei speichern? [J / n]
Um dies zu beheben, habe ich eine Textdatei (i.txt) im Stammverzeichnis meines SQL-Servers erstellt, die die folgenden Zeilen enthält, um diese zu beantworten:
ich
0
0
n
Dann wurde meine EXEC bcp-Zeile:
EXEC master..xp_cmdshell 'BCP "SELECT column_of_type_image FROM ** your_db WHERE id = 1" queryout "C: \ exportdir \ yourfile.pdf" -T-RAW <C: \ i.txt "
Dadurch wurde meine Datei ohne die zusätzlichen Zeichen exportiert.
Ich war auf der Suche nach einer Lösung zum Exportieren einer IMAGE-Spalte, in der verschiedene Dateitypen (pdf, xls, doc, xml ...) gespeichert sind, die ich exportieren möchte.
Der Ansatz in der Antwort galt nur für PDF-Dateien. Um alle Arten von Dateien zu exportieren, musste ich die Lösung wie folgt anpassen:
Wenn Sie keine Probleme mit einer GUI-Lösung haben, gibt es ein wirklich tolles Add-In für SSMS SSMSBoost , das viele nützliche Funktionen bietet und natürlich die einfachste Möglichkeit, in SQL gespeicherte Bilder in der Vorschau anzuzeigen (zumindest meiner Meinung nach).
ANMERKUNG : Sie müssen SSMS nach der Installation dieses Add-Ins neu starten.
Installieren Sie es und genießen Sie die Vorschau von Bildern mit: Rechtsklick> Visualisieren als> Bild
Auf einigen Servern ist xp_cmdshell deaktiviert und Sie erhaltenSQL Server blocked access to procedure 'sys.xp_cmdshell' of component 'xp_cmdshell' because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of 'xp_cmdshell' by using sp_configure. For more information about enabling 'xp_cmdshell', search for 'xp_cmdshell' in SQL Server Books Online.
JustAMartin
-2
USE[POC]DECLARE@outPutPath varchar(50)='C:\Extract_Photos',@i bigint
,@init int
,@data varbinary(max),@fPath varchar(max),@folderPath varchar(max)--Get Data into temp Table variable so that we can iterate over itDECLARE@Doctable TABLE(id int identity(1,1),[Doc_Num] varchar(100),[FileName] varchar(100),[Doc_Content] varBinary(max))INSERTINTO@Doctable([Doc_Num],[FileName],[Doc_Content])Select[STUDENTNO],[STUDENTNAME],[STUDENTPHOTO]FROM[dbo].[STUDENTPHOTOS]--SELECT * FROM @tableSELECT@i = COUNT(1)FROM@Doctable
WHILE@i >=1BEGINSELECT@data =[Doc_Content],@fPath =@outPutPath +'\'+ [Doc_Num] + '\' +[FileName],
@folderPath = @outPutPath + '\'+ [Doc_Num]
FROM @Doctable WHERE id = @i
--Create folder first
EXEC [dbo].[CreateFolder] @folderPath
EXEC sp_OACreate 'ADODB.Stream', @init OUTPUT; -- An instace created
EXEC sp_OASetProperty @init, 'Type', 1;
EXEC sp_OAMethod @init, 'Open'; -- Calling a method
EXEC sp_OAMethod @init, 'Write', NULL, @data; -- Calling a method
EXEC sp_OAMethod @init, 'SaveToFile', NULL, @fPath, 2; -- Calling a method
EXEC sp_OAMethod @init, 'Close'; -- Calling a method
EXEC sp_OADestroy @init; -- Closed the resources
print 'Document Generated at -'+@fPath
--Reset the variables for next useSELECT@data =NULL,@init =NULL,@fPath =NULL,@folderPath =NULLSET@i -=1END
Bitte ändere deinen Beitrag, indem du erklärst, was dieser Code bewirken soll.
Dezso
Danke Erax für das Skript, es hat wunderbar funktioniert. PS: Das Skript kann die Datei nicht extrahieren, wenn es remote mit SSMS ausgeführt wird. Es musste direkt auf dem SQLServer ausgeführt werden, damit der Anhang abgerufen werden konnte.
Antworten:
Dies ist die Lösung, die ich mir ausgedacht habe:
Aktivieren Sie
xp_cmdshell
mitErstellen Sie bei Bedarf ein Verzeichnis mit
xp_cmdshell
, um die erforderlichen Berechtigungen zu erhalten.Verwenden Sie BCP mit queryout
** your_db muss der vollständig qualifizierte Tabellenname sein, dh [Yourdb]. [YourSchema]. [YourTable]
quelle
2B 90 01 00
Ich hatte das gleiche Problem mit den zusätzlichen 4 Bytes, die am Anfang aller meiner Dateien hinzugefügt wurden. Anstatt die Option -N in meinem Befehl bcp zu verwenden, habe ich sie in -C RAW geändert. Wenn Sie dies tun, wird bcp mit den folgenden Fragen aufgefordert:
Um dies zu beheben, habe ich eine Textdatei (i.txt) im Stammverzeichnis meines SQL-Servers erstellt, die die folgenden Zeilen enthält, um diese zu beantworten:
Dann wurde meine EXEC bcp-Zeile:
Dadurch wurde meine Datei ohne die zusätzlichen Zeichen exportiert.
quelle
Ich war auf der Suche nach einer Lösung zum Exportieren einer IMAGE-Spalte, in der verschiedene Dateitypen (pdf, xls, doc, xml ...) gespeichert sind, die ich exportieren möchte.
Der Ansatz in der Antwort galt nur für PDF-Dateien. Um alle Arten von Dateien zu exportieren, musste ich die Lösung wie folgt anpassen:
(1.) Erstellen Sie eine Formatvorlagendatei:
(2.) Öffnen Sie die erstellte Exportformatdatei und bearbeiten Sie sie folgendermaßen:
Führen Sie dann Ihren Exportbefehl aus:
(3.) Falls Sie auf diesen Fehler stoßen (wie ich):
Stellen Sie Folgendes sicher:
Danach wird das Exportieren eines beliebigen IMAGE-Column-Dateiworts ohne Fehler durchgeführt.
Die Tribute für 1. und 2. richten sich an die Antwort auf die folgende Frage: /programming/1366544/how-to-export-image-field-to-file/24006947#24006947
quelle
Wenn Sie keine Probleme mit einer GUI-Lösung haben, gibt es ein wirklich tolles Add-In für SSMS SSMSBoost , das viele nützliche Funktionen bietet und natürlich die einfachste Möglichkeit, in SQL gespeicherte Bilder in der Vorschau anzuzeigen (zumindest meiner Meinung nach).
ANMERKUNG : Sie müssen SSMS nach der Installation dieses Add-Ins neu starten.
Installieren Sie es und genießen Sie die Vorschau von Bildern mit: Rechtsklick> Visualisieren als> Bild
quelle
Halten Sie den Befehl auf EINER LINIE - EINZELNE LINIE !!!
quelle
SQL Server blocked access to procedure 'sys.xp_cmdshell' of component 'xp_cmdshell' because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of 'xp_cmdshell' by using sp_configure. For more information about enabling 'xp_cmdshell', search for 'xp_cmdshell' in SQL Server Books Online.
quelle