Jump to content

CSV Dateien Import - Bessere Möglichkeit als Assistent?


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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?

Link zu diesem Kommentar

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 von julianvbrunner
Link zu diesem Kommentar

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 von addicted87
Link zu diesem Kommentar

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
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...