Generieren Sie SQL-Anweisungen zum Einfügen aus einer CSV-Datei
Brauche ich zum importieren einer csv-Datei in Firebird und ich verbrachte ein paar Stunden versucht, einige Werkzeuge und keines meine Bedürfnisse anzupassen.
Das Hauptproblem ist, dass alle Werkzeuge, die ich habe versucht, wie EMS Data Import und Firebird Data Wizard erwarten, dass meine csv - Datei enthält alle Informationen, die gebraucht von meinem Tisch.
Muss ich schreiben, einige benutzerdefinierte SQL in der insert-Anweisung, zum Beispiel, ich habe eine cvs-Datei mit den Namen der Stadt, aber meine Datenbank hat schon alle Städte in einer anderen Tabelle (normalisiert), brauche ich zum schreiben einer untergeordneten select-Anweisung in der Anweisung insert, die auch zum nachschlagen für die Stadt und schreibt seine ID, auch ich habe eine gespeicherte Prozedur zu cread GUIDS.
Meine Insert-Anweisung wäre so etwas wie dieses:
INSERT INTO PERSON (ID, NAME, CITY_ID) VALUES((SELECT NEW_GUID FROM CREATE_GUID), :NAME, (SELECT CITY_ID FROM CITY WHERE NAME = :CITY_NAME)
Ich weiß, dass es sehr einfach, eine Anwendung zu schreiben, um dies zu tun, aber ich weiß nicht, wie das Rad neu zu erfinden, und ich bin sicher, dass es einige tools gibt, es zu tun.
Könnt Ihr mir einige Ratschläge geben?
InformationsquelleAutor der Frage Fabio Gomes | 2008-08-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist ein bisschen feucht - aber für einmalige jobs, manchmal benutze ich Excel.
Wenn Sie importieren Sie die CSV-Datei in Excel können Sie eine Formel erstellen, die erstellt eine INSERT-Anweisung mit Hilfe von string-Verkettung in der Formel. Also - wenn Ihre CSV-Datei hat 3 Spalten, die angezeigt werden in den Spalten A, B und C in Excel, Sie schreiben, könnte eine Formel wie...
="INSERT INTO MyTable (Col1, Col2, Col3) VALUES (" & A1 & ", " & B1 & ", " & C1 & ")"
Dann können Sie replizieren die Formel nach unten alle Ihre Zeilen, und kopieren Sie und fügen Sie die Antwort in eine Textdatei zu laufen gegen die Datenbank.
Wie gesagt - es ist hart - aber es kann durchaus eine "quick und dirty" Möglichkeit, einen job zu bekommen getan!
InformationsquelleAutor der Antwort Chris Roberts
Benutze ich manchmal Die Weltweit Einfachste Code-Generator (Javascript-edition). Es ist online, aber es ist nur javascript - Ihre Daten gehen nicht überall. Es gibt auch eine asp-version aber mit mehr Funktionen.
InformationsquelleAutor der Antwort Blorgbeard
Gut, wenn es eine CSV, und es ist dies ein einmaliger Vorgang, öffnen Sie die Datei in Excel, und dann Formeln schreiben, füllen Sie Ihre Daten in irgendeiner Weise, die Sie wünschen, und schreiben Sie dann eine einfache Concat Formel zu erstellen Sie Ihre SQL -, und kopieren Sie dann die Formel für jede Zeile. Sie erhalten eine große Anzahl von SQL-Anweisungen, die Sie ausführen können, wo immer Sie wollen.
InformationsquelleAutor der Antwort Vaibhav
Fabio,
Ich habe getan, was Vaibhav hat viele Male getan, und es ist eine gute "quick and dirty" Weg, um Daten in eine Datenbank.
Wenn Sie brauchen, um dies zu tun ein paar mal, oder auf irgendeine Art von Zeitplan, dann eine zuverlässigere Methode ist das laden der CSV-Daten "as-is" in eine Tabelle (ich.e customer_dataload) und dann verwenden standard-SQL-Anweisungen zum Auffüllen der fehlenden Felder.
(Ich weiß nicht, Firebird-syntax - aber sowas...)
etc.
In der Regel, es ist viel schneller (und zuverlässiger), um die Daten IN die Datenbank und dann die Daten, als zu versuchen, zu beheben, werden die Daten während des Uploads. Sie erhalten auch den nutzen von Transaktionen zu ermöglichen, Sie für den ein ROLLBACK ausgeführt, wenn es nicht funktioniert!!
InformationsquelleAutor der Antwort Guy
Importieren Sie die CSV-Datei in eine Tabelle so wie Sie ist, dann schreiben Sie eine SQL-Abfrage, die nicht alle die erforderlichen Transformationen auf die importierte Tabelle und fügt das Ergebnis in die Zieltabelle.
So etwas wie:
Netten Tipp über die Verwendung von Excel, aber ich empfehle auch immer bequem mit einer Skriptsprache wie Python, weil es für einige Aufgaben ist es einfacher, einfach, schreiben Sie eine kurze python-Skript um die Arbeit zu tun, als zu versuchen, zu finden, die Funktion, die Sie brauchen, in Excel oder ein pre-made-tool, das die Arbeit tut.
InformationsquelleAutor der Antwort Nickolay
Könnten Sie versuchen, fbcopy und fbexport tools.
InformationsquelleAutor der Antwort idursun
Sehr Einfaches online-Werkzeug : Konvertieren von/zu CSV
InformationsquelleAutor der Antwort hdoghmen
Verwende ich eine leichte variation der Ballon ist Excel-Technik.
Ich hoch empfehlen den Download der frei ASAP Utilities plug-in für Excel. Eine der vielen zeitsparenden tools, die Sie enthalten sind einfügen vor Aktueller Wert und einfügen nach dem aktuellen Wert Optionen.
Diese sollten lassen Sie zu einer Lösung gelangen schneller zu helfen, bauen Sie Ihre insert-Anweisungen.
InformationsquelleAutor der Antwort berberich
verwenden Sie die csv-Datei als eine externe Tabelle. Dann können Sie SQL zum kopieren der Daten aus der externen Tabelle auf der Ziel-Tabelle - mit allen Möglichkeiten von SQL.
Sehen http://www.firebirdsql.org/index.php?op=useful&id=netzka
InformationsquelleAutor der Antwort Christoph Theuring
Gerade dieses VBA-Skript, die möglicherweise nützlich für diesen Zweck. Alle sollten tun müssen, ist, ändern Sie die Insert-Anweisung, um die Tabelle in Frage und die Liste von Spalten (offensichtlich in der gleichen Reihenfolge Sie erscheinen auf der Excel-Datei).
InformationsquelleAutor der Antwort James C
option 1:
1 - haben Sie versucht, IBExert? IBExpert \ Tools \ Daten Importieren (Probe-oder Kunden-Version).
option 2:
2 - laden Sie Ihre csv-Datei in eine temporäre Tabelle mit F_BLOBLOAD.
3 - erstellen Sie eine gespeicherte Prozedur, die 3 Funktionen (f_stringlength, f_strcopy, f_MID)
überqueren Sie alle Ihre Zeichenfolge, ziehen Sie Ihre Felder, bauen Sie Ihre INSERT INTO.
links:
2: http://freeadhocudf.org/documentation_english/dok_eng_file.html
3: http://freeadhocudf.org/documentation_english/dok_eng_string.html
InformationsquelleAutor der Antwort peponloqui
Einem tool, das ich vor kurzem versucht, das klappte hervorragend ist FSQL.
Schreiben Sie einen IMPORT-Befehl, fügen Sie ihn in
FSQL
und importiert die CSV-Datei in das Firebird-Tabelle.InformationsquelleAutor der Antwort Stan
Ich würde dies tun mit awk.
Zum Beispiel, wenn Sie hatte diese Informationen in einer CSV-Datei:
Den folgenden Befehl aus, geben Sie, was Sie wollen, führen Sie in das gleiche Verzeichnis wie die CSV-Datei (mit dem Namen
name-city.csv
in diesem Beispiel).Typ
awk --help
für weitere Informationen.InformationsquelleAutor der Antwort Terry Lorber
Können Sie Kostenlose csvsqldies zu tun.
Nun führen Sie einen Befehl wie so importieren Sie Ihre Daten in Ihrer Datenbank. Mehr details bei den links oben, aber es wäre so etwas wie:
csvsql --db firebase:///d=mydb --insert mydata.csv
Folgende arbeiten mit sqlite, und das ist, was ich verwenden, um konvertieren von Daten in eine einfache Abfrage format
csvsql --db sqlite:///dump.db --insert mydata.csv
InformationsquelleAutor der Antwort Brad Parks