Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server BCP-Export beschädigte Datei?

Gott sei Dank, dank der Antwort von @ user_0 und der kryptischen Antwort und dem Kommentar von @ user3494351 und diesem alten Forumsbeitrag habe ich das endlich herausgefunden, nachdem ich mehrere Stunden lang meinen Kopf gegen die Wand geschlagen hatte.

Das Problem ist, dass BCP der Datei standardmäßig zusätzliche 8 Bytes hinzufügen möchte. Dadurch wird die Datei beschädigt und kann nicht geöffnet werden, wenn Sie nur das native Flag -n verwenden.

Mit BCP können Sie jedoch eine Formatdatei als Ausgabe angeben, mit der Sie angeben können, dass die zusätzlichen 8 Bytes nicht hinzugefügt werden sollen. Ich habe also eine Tabelle, die ich in SQL Server erstellt habe (zur Verwendung in einem Cursor), die nur EINE REIHE und EINE SPALTE mit meinen Binärdaten enthält. Tabelle muss vorhanden sein, wenn Sie den ersten Befehl ausführen.

In der Befehlszeile müssen Sie zuerst Folgendes tun:

bcp MyDatabase.MySchema.MyTempTable format nul -T -n -f formatfile.fmt

Dadurch wird formatfile.fmt in dem Verzeichnis erstellt, in dem Sie sich befinden. Ich habe es auf Laufwerk E:\ getan. So sieht es aus:

10.0
1
1       SQLBINARY           8       0       ""   1     MyColumn             ""

Diese 8 dort ist die Variable, die bcp angibt, wie viele Bytes zu Ihrer Datei hinzugefügt werden sollen. Es ist der Bastard, der Ihre Dateien beschädigt. Ändern Sie diesen Sauger in eine 0:

10.0
1
1       SQLBINARY           0       0       ""   1     MyColumn             ""

Führen Sie jetzt einfach Ihr BCP-Skript aus, löschen Sie das Flag -n und fügen Sie das Flag -f hinzu:

bcp "SELECT MyColumn FROM MyDatabase.MySchema.MyTempTable" queryout "E:\MyOutputpath" -T -f E:\formatfile.fmt