Export Binär-Datei, die Daten (Bilder) von SQL über eine gespeicherte Prozedur

Ich versuche zu exportieren eine ziemlich große Anzahl von Bild-Dateien, die intern gespeichert in einer SQL-Datenbank als binäre Daten.

Recht neue zu schreiben von gespeicherten Prozeduren in SQL habe ich über ein paar sehr nützliche Anleitungen, wie diese archiviert werden kann, aber ich scheine da etwas zu fehlen.

Ich bin mit SQL Server 2008 R2, lokal, und ich bin versucht zu schreiben, das Dateien in einen Ordner auf meinem Laufwerk C:\.

Hier ist die buisness Teil was ich habe, so weit:

BEGIN
DECLARE @cmd VARCHAR(8000)
DECLARE @result int

DECLARE curExportBinaryDocs CURSOR FAST_FORWARD FOR
SELECT 'BCP "SELECT Photograph_Data FROM [ALBSCH Trial].[dbo].[Photograph] WHERE Photograph_ID = '
  + CAST(Photograph_ID AS VARCHAR(500)) + '" queryout "' + @OutputFilePath 
  + CAST(Photograph_ID AS VARCHAR(500)) + '.jpg"' + ' -n -T'
FROM dbo.Photograph

OPEN curExportBinaryDocs   
FETCH NEXT FROM curExportBinaryDocs INTO @cmd
WHILE @@FETCH_STATUS = 0
  BEGIN
     --PRINT @cmd
     EXEC @result = xp_cmdshell @cmd         
     FETCH NEXT FROM curExportBinaryDocs INTO @cmd
  END 
CLOSE curExportBinaryDocs
DEALLOCATE curExportBinaryDocs
END

'@result' wird immer auf '1' (fehlgeschlagen) nach dem Aufruf von xp_cmdshell. Alle die Namen der Tabellen/Felder richtig sind, so vermute ich es ist etwas falsch mit meinem BCP nennen, aber ich bin nicht sicher, was zu versuchen nächsten.

Jede Hilfe oder Beratung wäre sehr willkommen.

  • Wie sind Sie mit dem SQL? Der SQL läuft unter Anmeldeinformationen eines Benutzers Bewirkt, dass der Benutzer über Rechte zum erstellen von Dateien im Ausgabe-Ordner?
  • Ich bin Protokollierung in der SQL-server mit meinem üblichen windows-Benutzername und windows-Authentifizierung. Ich habe es geschafft, eine Lösung mithilfe der Methode hier beschrieben: stackoverflow.com/questions/1366544/..., aber wenn möglich würde ich gerne auf den Grund gehen, das problem habe ich mit meiner ursprünglichen Methode, nur für den Frieden des Geistes!
  • Ich glaube, was du tust, ist ein bisschen schief. Wissen Sie über den SQL-Server die "Datei-stream-Datenbank aktivieren". Es ermöglicht Ihnen das speichern von BLOBs auf der Festplatte, während die BLOBs sind noch erhalten, von Ihrem SQL-Server. Nach stroing diese BLOBs auf der Festplatte, Ihre Anwendung muss nur eine Abfrage auf Ihre Datenbank und erhalten Sie das Objekt. Auch mit dem cursor ist nicht eine gute Sache (ist es langsam).
InformationsquelleAutor ChrisMurray | 2012-08-30
Schreibe einen Kommentar