wie Sie angeben, Zeile Trennzeichen bei Verwendung von bcp-format-Datei
Ich bin mit bcp
Dienstprogramm zum importieren von Daten in Sybase
Datenbank auf Solaris
system
Da die bcp-Datei generiert wird, die von anderen xml-parsing Skript, ich habe keine Kontrolle über diese zu machen, erzeugen die Felder in der Reihenfolge, die ich möchte. Und nun die Reihenfolge der Felder in der bcp-Datei ist ein wenig anders mit der Reihenfolge in der Datenbank-Tabelle.
Möchte ich verwenden Sie eine format-Datei fuer bcp-tool zur Steuerung der Reihenfolge der Felder in die Datenbank geladen, so habe ich die Probe bcp-Datei wie unten und konstruiert eine Datei im format entsprechend:
die bcp-Datei:
603289|Aug 20 2011 12:00AM|YYY aaa OVD|KLYYP8
603284|Aug 22 2011 12:00AM|XXX bbb OVD|KLPK06
format " file:
10.0
4
1 SYBCHAR 0 12 "|" 3 ver
2 SYBCHAR 0 26 "|" 2 first_dt
3 SYBCHAR 0 60 "|" 4 name1
4 SYBCHAR 0 10 "|" 1 name2
Obwohl ich geblieben bin auf den folgenden Fehler:
$bcp my_db..my_tbl in test.bcp -e error -f format.fmt -r\\n -S Sever -U user -P pw
Starting copy...
CSLIB Message: - L0/O0/S0/N24/1/0:
cs_convert: cslib user api layer: common library error: The conversion/operation was stopped due to a syntax error in the source field.
Unexpected EOF encountered in BCP data-file.
bcp copy in partially failed
1 rows copied.
Ich vermute, dass die Ursache für den Fehler ist das bcp-Dienstprogramm nicht erkennen kann, das Zeilen-Trennzeichen ist '\n' - Zeichen (die ich verwendet habe od -c test.bcp
um dies zu überprüfen), obwohl die -r\\n
option im Befehl scheint nicht zu arbeiten, sollte die Angabe der Zeilen-Trennzeichen wie '\n' - Zeichen.
Hat jemand eine Ahnung?
Edit:
Habe ich eine änderung am format der Datei, und es funktioniert jetzt, ich habe die Feld-Trennzeichen für das Letzte Feld von '|' bis '\n' wie folgt:
den neue - format-Datei:
10.0
4
1 SYBCHAR 0 12 "|" 3 ver
2 SYBCHAR 0 26 "|" 2 first_dt
3 SYBCHAR 0 60 "|" 4 name1
4 SYBCHAR 0 10 "\n" 1 name2
Als Michael erwähnt in den Kommentaren, ist es schwierig, um format-Dateien. Bei der Verwendung von original-format-Datei, die ich versucht habe zu add '|' am Ende der einzelnen Datensätze, obwohl die Datei wurden nicht korrekt verarbeitet.
Nun kann die Datei korrekt verarbeitet werden, obwohl ich nicht sicher bin, was wird als Zeilentrennzeichen durch das bcp-Dienstprogramm
Alternativ können Sie erstellen eine temporäre Tabelle mit Spalten, die in der BCP-Datei, um - bcp in die temp-Tabelle, und wählen Sie dann aus dem temp-Tabelle in Ihrer Produktion Tabelle.
Ich bin damit einverstanden, Neuerstellung der Tabelle oder mithilfe einer temp-Tabelle oder-Sicht ist meine Letzte Möglichkeit:)
Sie können nicht von BCP in eine Sicht, also eine Sicht funktioniert nur, wenn Sie wollen, BCP Daten aus der Tabelle in das korrekte format, so wird es leichter sein, um BCP, sobald die Tabelle neu aufgebaut wird.
Danke, du hast Recht, ich dachte(fälschlicherweise) die "bcp in" was getan werden kann, ich habe in der Sybase-doc und es ist, was Sie sagte, bcp aus einer Sicht ist OK und bcp in ein view ist nicht
InformationsquelleAutor poiu2000 | 2013-05-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sybase-format-Dateien kann schwierig sein, zu verwenden, und ich habe noch um zu arbeiten, um redorder Spalten. Ohne eine format-Datei, und da du keine Kontrolle über die input-Datei, die Sie gegeben sind, sind Ihre Optionen:
bcp
in, und verschieben Sie die Daten in Ihre Produktion Tabelle von dort.Uns Ihre Daten-format, das folgende
bcp
Kommandozeile funktionieren sollte.InformationsquelleAutor Michael Gardner
Da die meisten loader utilities, BCP nicht Zeilen Lesen, es wird nur ein Haufen von bytes von der Quelle-Datei, daher müssen Sie die Ende-Zeile-Zeichen auf der .fmt-Datei, vor allem, wenn das Ende der Zeile-Zeichen können unterschiedlich sein, abhängig von der Codierung der Datei.
Zum Beispiel, in dem Beispiel, das Sie zur Verfügung gestellt haben, müssen Sie dieses auf der source-Datei:
Aber abhängig von der Codierung, die Sie haben:
oder so:
Das ist, warum die änderung der terminator hast du auf der letzten Spalte ist so wichtig:
Folgende Bild zeigt, was bedeutet, dass jede Komponente auf der format-Datei (ich habe es von hier):
Ich downvoted, da es nicht mir helfen, wenn ich war auch fest mit dem gleichen Problem, und es war markiert als "Antwort", dann wollte ich halt warnen Sie andere, die diese Antwort war nicht die Arbeit, auch den gleichen user, der die Frage gepostet, eine gültige Antwort gefunden, die nicht im Zusammenhang mit der Antwort, die Sie geschrieben haben... aber Ihr Punkt ist gültig! die Antwort, die du geschrieben hast, nicht für mich, aber es könnte gearbeitet haben, für jemand anderen... auch, ich habe versucht, um wieder mein downvote, wenn Sie Lesen Ihren Kommentar, aber es wurde gesperrt...
Ich Schätze die Erklärung. Ich von Ihnen positiv bewertet werden Ihre Antworten, denn Sie sind die besseren.
Danke Michael!... sehen Sie sich um...
InformationsquelleAutor Marco Vargas