addicted87 0 Geschrieben 16. Juli 2015 Melden Teilen Geschrieben 16. Juli 2015 Hallo meine lieben, ich habe mal eine Frage. Ich habe gut 40 csv Dateien. Alle so um die 1.280.000 Zeilen lang mit ca 25 Spalten. Jede Datei soll in eine eigene Tabelle importiert werden. Sprich...ich will am Ende 40 Tabellen in der Datenbank meines SQL Servers 2014 haben. Wenn ich das über den Assistenten mache, muss ich ja jede Datei einzeln laden...was jetzt nicht unbedingt so schlimm ist, wenn da nicht dieses ständige angeben der Datentypen jeder einzelnen Spalte wäre. Sprich, ich muss pro Datei jeweils für 25 Spalten einen Datentyp angeben. Das nervt echt, wo doch alle CSV dateien die gleichen SPalten haben und annähernd die gleichen Datentypen haben sollten --> Ich wähle meist nur den "String-Datentyp", wenn es sich nciht um ein Datum oder Dezimalzahl handelt. Hier ist natürlich das doofe, wenn der STring(100) z.B nicht ausreicht, dann bricht der Assistent ja den Import ab, weil Datenverlust droht. Ich lasse vorher immer den Typen durch den Assistenten vorschlagen, und ändere dann meist den Stringwert nach oben ab, sprich aus z.B. 100 mach ich 150 aus Sicherheit. Kann ich dieses ganze Vorgehen irgendwie abkürzen/vereinfachen? Danke schon mal Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 16. Juli 2015 Melden Teilen Geschrieben 16. Juli 2015 Moin, du könntest dir ein Skript bauen, das die CSV-Dateien liest, die Tabellen erzeugt und dann die Daten in die Tabellen pumpt. Der größte Teil des Skripts wäre ja immer identisch. Auf die Schnelle würde ich mir wahrscheinlich ein T-SQL-Gerüst für die Tabellen bauen und dann mit Excel die INSERT-Kommandos aus den CSVs erzeugen. Das ist zwar nicht elegant, aber einfach. [Excel: Admins unbekannter Liebling | faq-o-matic.net]http://www.faq-o-matic.net/2008/01/19/excel-admins-unbekannter-liebling/ Gruß, Nils Zitieren Link zu diesem Kommentar
addicted87 0 Geschrieben 17. Juli 2015 Autor Melden Teilen Geschrieben 17. Juli 2015 Da bin ich wieder, ;-) also ich sage mal so....die Tabellen durch SQL generieren zu lassen ist ja kein Problem. Kann ich ja quasi durch den Assistenten machen lassen (sprich mir dort den SQL Befehl anzeigen lassen und diesen dann kopieren) Wir würde das denn jetzt mit dem lesen und dem reinpumpen der CSV Datei exakt gehen? Brauche ich dafür dann diesen insert bulk ...befehl? Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 17. Juli 2015 Melden Teilen Geschrieben 17. Juli 2015 Moin, je nachdem, wie komplex die CSV-Dateien sind könntest du dir mit dem oben verlinkten Verfahren ein SQL-Skript generieren, das für jede Datenzeile einen INSERT-Befehl erzeugt. Das ist oft weniger fehlerträchtig als ein Massenimport, weil du vor dem Ausführen das SQL-Skript noch mal kontrollieren kannst. Gruß, Nils Zitieren Link zu diesem Kommentar
julianvbrunner 0 Geschrieben 17. Juli 2015 Melden Teilen Geschrieben 17. Juli 2015 (bearbeitet) Guten Abend Addicted! Wenn dein Problem bis Montag den 20.07 Zeit hat, könnte ich dir ein Skript zukommen lassen für den Import von CSV-Dateien in SQL, welches ich aus dem selben Grund geschrieben hatte. Edit: Habe das Skript bereits gefunden, doch das müsstest du mit dem MSSQL kompatiblen Powershell ISE ausführen um zum gewünschten Ergebnis zu kommen. Wie auch immer, hier das Skript: $text = Import-Csv 'Beispielpfad' ForEach($Wort in $text) { $sn = $wort.Beispielspalte \\* Für jede anzulegende Spalte die auch in der Csv-Datei vorhanden ist*\\ $fn = $wort.Beispielspalte \\* Kann beliebig erweitert werden *\\ } $query = "Insert into Kunde (vorname,nachname) values ('$fn', '$sn')" \\* nicht vergessen die Variablen auch hier einzutragen*\\ sqlcmd -S Beispielserver -d Beispieldatenbank -Q "$query" Mfg julianvbrunner bearbeitet 17. Juli 2015 von julianvbrunner Zitieren Link zu diesem Kommentar
addicted87 0 Geschrieben 18. Juli 2015 Autor Melden Teilen Geschrieben 18. Juli 2015 (bearbeitet) Ich bin leider erst wieder am Montag oder Dienstag auf Arbeit und werd das mal ausprobieren. Will mal sicher gehen, ob ich das verstanden habe. Angenommen ich habe 10 CSV dateien, die jeweils die Spalten ID, Vorname, Nachname, Geburtstag, Ort haben und die Dateien im Ordner D:\Daten\CSV\Datei001..10.csv liegen, müsste das Skript so aussehen: $text = Import-Csv 'D:\Daten\CSV\' ForEach($Wort in $text) { $fa = $wort.ID $fb = $wort.Vorname $fc = $wort.Nachname $fd = $wort.Geburtstag $fe = $wort.Ort } $query = "Insert into Kunden (id,vorname,nachname,geburtstag,ort) values ('$fa', '$fb','$fc', '$fd','$fe')" sqlcmd -S WIN-XXXYYYZZZ -d Einzelhandel -Q "$query" Hab ich das richtig verstanden? Aber werden dann nicht die Daten der ganzen 10 CSV Dateien in die gleiche Tabelle (in diesem Fall Kunden) geschrieben? bearbeitet 18. Juli 2015 von addicted87 Zitieren Link zu diesem Kommentar
julianvbrunner 0 Geschrieben 19. Juli 2015 Melden Teilen Geschrieben 19. Juli 2015 Ich glaube du musst leider für jede csv datei das skript abändern, bin mir aber nicht 100%ig sicher Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 19. Juli 2015 Melden Teilen Geschrieben 19. Juli 2015 Moin, du kannst die Skriptlogik ja auch so erweitern, dass die Tabelle automatisch identifiziert wird. Irgendeinen Zusammenhang wird es ja geben, den man in Code umsetzen kann. Gruß, Nils Zitieren Link zu diesem Kommentar
MDD 12 Geschrieben 20. Juli 2015 Melden Teilen Geschrieben 20. Juli 2015 Hallöchen. Bin mir nicht sicher ob das oben genannte Script funktioniert und nicht nur den letzten Datensatz einliest. Falls das so ist würde ich das ein wenig umformulieren $query = "Insert into Kunden (id,vorname,nachname,geburtstag,ort) values " $text = Import-Csv 'D:\Daten\CSV\' ForEach($Wort in $text) { $fa = $wort.ID $fb = $wort.Vorname $fc = $wort.Nachname $fd = $wort.Geburtstag $fe = $wort.Ort $query = $query + "('$fa', '$fb','$fc', '$fd','$fe')," } $query. TrimEnd(",") sqlcmd -S WIN-XXXYYYZZZ -d Einzelhandel -Q "$query" Gruß MDD Zitieren Link zu diesem Kommentar
wiri 10 Geschrieben 21. Juli 2015 Melden Teilen Geschrieben 21. Juli 2015 Hi hier ist vllt was passendes: http://www.sqlservercentral.com/scripts/APS/128961/ Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.