Jump to content

CSV Datei nur auslesen / Tabelle mit CSV Struktur erstellen


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

Empfohlene Beiträge

Hallo liebes Forum,

 

ich habe einige Foren nach einer Lösung für mein Problem durchforstet aber leider keine Lösung gefunden. Deshalb wende ich mich an euch, in der Hoffnung, eine Lösung zu finden.

Es handelt sich um ein SQL Server 11.0.

 

Es sollen in eine Datenbank ca. 90-100 CSV Dateien mehrmals im Jahr importiert werden. Die Tabellenstrukturen können sich aber bei jedem Import ändern. D.h. man hat bspw. heute eine CSV-Datei mit 28 Spalten und in einem halben Jahr hat genau diese Datei nur noch 27 Spalten. So kann ich die ganze Tabelle wegschmeißen und die Struktur neu anlegen oder mir alle Spalten anschauen und herausfinden, welche Spalte fehlt oder zu viel drin ist. 

 

Ich habe das ganze Vorgehen insoweit automatisiert, dass ich die CSV-Dateien, welche sich in einem bestimmten Pfad befindet, in eine Tabelle schreibe (Dateiname, Dateityp, etc.) und diese in eine Schleife eingebunden habe (siehe nachfolgend das Statement dazu):

--Tabelle für neue CSV-Dateien leeren
TRUNCATE TABLE CSV_Files;
PRINT 'Tabelle für CSV-Dateien geleert'


--CSV-Dateinamen in die Tabelle einfügen
INSERT INTO CSV_Files(Dateiname, Tiefe, Datei)
EXEC master..xp_dirtree 'C:\Bsp_Ordner', 1, 1 
PRINT 'CSV-Dateien in die Tabelle CSV_Files geschrieben'


--Dateityp in separate Spalte schreiben
UPDATE CSV_Files
SET Dateityp = '.csv',
	Dateiname = REPLACE(Dateiname, '.csv', '')

DECLARE @i int = 1
DECLARE @Zaehler int = (SELECT MAX(ID_CSV) FROM CSV_Files)
DECLARE @Filename varchar(50)
DECLARE @File varchar(50)
DECLARE @Ext varchar(50)
DECLARE @Tablename varchar(50)
DECLARE @Truncate varchar(200)
DECLARE @Befehl varchar(2000)

SET @Ext = '.csv'


WHILE @i <= @Zaehler
BEGIN

	PRINT 'Schleife Nr: ' +CAST(@i  as varchar)
	
	SET @Filename = (SELECT Dateiname FROM CSV_Files WHERE ID_CSV = @i)
	SET @Tablename = @Filename
	SET @Truncate = 'TRUNCATE TABLE '+@Tablename
	SET @File = @Filename + @Ext

	SET @Befehl = 'BULK INSERT '+@Tablename+'
	FROM ''C:\Bsp_Ordner\'+@File+'''
	WITH(
			FIRSTROW = 2,
			FIELDTERMINATOR = ''0x3b'',
			ROWTERMINATOR = ''\n''					 
		)'

	EXEC (@Truncate)
	PRINT 'Tabelle '+@Tablename+' wurde gelöscht'

	EXEC (@Befehl)
	PRINT 'Tabelle '+@Tablename+' wurde befüllt
	'
	SET @i = @i + 1
	PRINT 'Als nächstes Schleife Nr: ' +CAST(@i  as varchar)
END

 

Solange die alte Tabellenstruktur mit der Struktur in der entsprechenden CSV-Datei übereinstimmt, läuft die Schleife auch einwandfrei durch und liefert mir genau das Ergebnis, welches ich erwarte.

Nun meine Frage an euch:

Gibt es eine Möglichkeit, CSV-Dateien per Code einfach nur auszulesen (somit könnte ich die Tabellen bei jedem Import komplett wegschmeißen und durch das Auslesen neu anlegen. Anschließend gehts weiter mit der Schleife, welches dann problemlos durchlaufen würde) ?

Oder gibt es eine Möglichkeit, per Code die CSV-Dateien direkt in neue Tabellen (Strukturen aus der CSV-Datei) zu importieren? Das passiert ja, wenn ich manuell über die Datenbank -> Tasks.. -> Datei importieren einzelne CSV-Dateien importiere. Da wird ja als Zieltabelle entweder eine bestehende ausgewählt oder wenn nicht vorhanden, eine neue angelegt.

 

Ich hoffe, ihr könnt mir bei diesem Problem helfen. Ich verzweifle schon so langsam, weil ich seit Wochen keine Lösung dazu gefunden habe und es nicht zumutbar ist, 100 CSV-Dateien einzeln zu importieren.

 

Beste Grüße

Yasin 

bearbeitet von Yasin_k93
Schönheitsfehler im Code
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...