CSV to SQL

SQL INSERT-Statements aus CSV-Daten generieren

Beispiel ausprobieren

CSV-Eingabe

SQL-Ausgabe

Läuft lokal · Sicher zum Einfügen von Secrets
SQL erscheint hier…
Tabellenname:

Was ist CSV-zu-SQL-Konvertierung?

Die Konvertierung von CSV zu SQL wandelt kommagetrennte Werte in Structured Query Language-Anweisungen um, die eine relationale Datenbank ausführen kann. Die häufigste Ausgabe ist ein Paar: eine CREATE TABLE-Anweisung, die Spalten definiert, und eine oder mehrere INSERT INTO-Anweisungen, die diese Spalten mit den Zeilen aus der CSV-Datei befüllen.

CSV-Dateien folgen der RFC 4180-Spezifikation. Jede Zeile ist ein Datensatz, Felder werden durch ein Trennzeichen (meist ein Komma) getrennt, und Felder, die das Trennzeichen oder Zeilenumbrüche enthalten, werden in doppelte Anführungszeichen eingeschlossen. SQL ist die Standardsprache zur Datenverwaltung in Systemen wie PostgreSQL, MySQL, SQLite und SQL Server. Die Konvertierung zwischen diesen beiden Formaten ist eine der häufigsten Datenimport-Aufgaben in der Softwareentwicklung.

Ein korrekter CSV-zu-SQL-Konverter behandelt Anführungszeichen korrekt, maskiert einfache Anführungszeichen in Werten (durch Verdopplung zu '' gemäß SQL-Standard), ordnet Spaltenüberschriften gültigen SQL-Bezeichnern zu und kann optional Datentypen ableiten. Über die grundlegende Maskierung hinaus normalisiert ein guter Konverter Spaltennamen (ersetzt Leerzeichen und Bindestriche durch Unterstriche) und schließt die Ausgabe in einen Transaktionsblock ein, sodass ein fehlgeschlagener Import sauber zurückgerollt wird statt unvollständige Daten in der Tabelle zu hinterlassen. Ohne einen Konverter ist das manuelle Schreiben von INSERT-Anweisungen selbst für wenige hundert Zeilen fehleranfällig und zeitaufwändig.

Warum einen CSV-zu-SQL-Konverter verwenden?

SQL INSERT-Anweisungen manuell aus Tabellendaten zu schreiben ist mühsam und fehleranfällig. Ein Konverter automatisiert die wiederkehrenden Aufgaben, sodass Sie sich auf Schema-Design und Datenvalidierung konzentrieren können.

SQL in Sekunden generieren
CSV einfügen, fertig ausführbares SQL erhalten. Kein manuelles Setzen von Anführungszeichen, kein Maskieren von Apostrophen, kein Zählen von Spalten. Die Konvertierung läuft vollständig im Browser.
🔒
Daten im Browser behalten
Ihre CSV verlässt Ihren Rechner nie. Das gesamte Parsen und die SQL-Generierung erfolgen clientseitig — kein Server-Upload, keine Protokollierung, kein Zugriff Dritter auf Ihre Daten.
🎯
Korrekte SQL-Syntax erzeugen
Einfache Anführungszeichen in Werten werden gemäß SQL-Standard als '' maskiert. Spaltennamen werden zu gültigen Bezeichnern bereinigt. Die Ausgabe ist syntaktisch korrekt für PostgreSQL, MySQL und SQLite.
📋
Jede CSV-Struktur verarbeiten
Das Tool erkennt Trennzeichen automatisch (Komma, Semikolon, Tab, Pipe) und verarbeitet Felder mit eingebetteten Kommas oder Zeilenumbrüchen gemäß RFC 4180.

Anwendungsfälle für CSV zu SQL

Datenbank-Seeding
CSV-Fixture-Dateien in INSERT-Anweisungen für Entwicklungs- oder Staging-Datenbanken umwandeln. Nützlich in CI-Pipelines, wo wiederholbare Seed-Daten ohne ORM benötigt werden.
Datenmigration
Daten, die aus einem System exportiert wurden (CRM, Tabellenkalkulation, ältere Anwendung), in eine neue relationale Datenbank übertragen. SQL generieren, prüfen und dann in einer Transaktion ausführen.
Backend-API-Entwicklung
Eine lokale PostgreSQL- oder MySQL-Instanz schnell mit Testdaten aus einer CSV befüllen. Schneller als das Schreiben eines Migrationsskripts, wenn nur ein einmaliges Laden benötigt wird.
QA und Testautomatisierung
SQL aus CSV-Testfixtures generieren, um den Datenbankzustand vor Integrationstests herzustellen. Mit einem Teardown-Skript kombinieren, um die Tabelle zwischen Testläufen zurückzusetzen.
Vorbereitung für Datenanalyse
CSV-Datensätze in SQLite laden für Ad-hoc-Abfragen. SQLite liest SQL INSERT-Anweisungen direkt ein — ein schneller Weg vom Tabellenexport zu abfragbaren Daten.
SQL lernen
Studierende können Beispiel-CSVs in SQL umwandeln, um SELECT-, JOIN- und Aggregatabfragen auf realistisch wirkenden Daten zu üben, ohne ein Schema von Grund auf aufzubauen.

SQL-Datentypübersicht

Bei der Konvertierung von CSV zu SQL wird jede Spalte standardmäßig als TEXT definiert, da CSV keine Typmetadaten enthält. Wenn Sie die Spaltentypen kennen, können Sie TEXT in der CREATE TABLE-Ausgabe ersetzen. Diese Tabelle zeigt die gängigsten SQL-Typen und wann jeder verwendet wird.

TypVerwendet fürHinweise
TEXT / VARCHARStrings, mixed contentDefault safe choice; works in every SQL dialect
INTEGER / INTWhole numbers (age, count, ID)Use when column contains only digits with no decimals
REAL / FLOATDecimal numbers (price, rate)Needed for columns with dots like 19.99 or 3.14
DATEISO 8601 dates (2024-01-15)Requires consistent formatting; varies by database
BOOLEANtrue/false, 1/0, yes/noMySQL uses TINYINT(1); PostgreSQL has native BOOL
NUMERIC / DECIMALExact precision (currency)Specify scale: DECIMAL(10,2) for money columns
BLOB / BYTEABinary dataRarely needed in CSV imports; use for hex-encoded fields

SQL-Dialekt-Vergleich

SQL-Syntax variiert zwischen Datenbank-Engines. Die generierten INSERT-Anweisungen verwenden Standard-SQL, das in den meisten Systemen funktioniert, aber bestimmte Funktionen unterscheiden sich. Diese Tabelle fasst die Unterschiede zusammen, die beim CSV-Import am wichtigsten sind.

FunktionPostgreSQLMySQLSQLiteSQL Server
Identifier quoting"col"`col`"col"[col]
String escape'''' or \'''''
INSERT syntaxINSERT INTOINSERT INTOINSERT INTOINSERT INTO
Batch INSERTVALUES (),()…VALUES (),()…VALUES (),()…max 1000 rows
Auto-incrementSERIALAUTO_INCREMENTAUTOINCREMENTIDENTITY(1,1)
Upsert / mergeON CONFLICTON DUPLICATE KEYON CONFLICTMERGE
NULL handlingIS NULLIS NULL / <=>IS NULLIS NULL
COPY from CSVCOPY … FROMLOAD DATA INFILE.importBULK INSERT

INSERT vs. COPY: Eine Import-Methode wählen

Für kleine bis mittlere Datensätze (unter 10.000 Zeilen) funktionieren INSERT-Anweisungen gut und sind über alle SQL-Datenbanken portabel. Für große Importe bieten Datenbanken Bulk-Loading-Befehle, die den SQL-Parser vollständig umgehen.

INSERT INTO
Standard-SQL. Funktioniert überall. Jede Zeile wird als SQL-Anweisung geparst, daher ist der Overhead bei großen Datensätzen höher. Unterstützt bedingte Logik (ON CONFLICT, ON DUPLICATE KEY). Optimal für Seed-Daten, kleine Migrationen und Fälle, in denen zeilenweise Kontrolle benötigt wird.
COPY / LOAD DATA
Datenbankspezifischer Bulk-Loader. PostgreSQL verwendet COPY, MySQL verwendet LOAD DATA INFILE, SQLite verwendet .import, und SQL Server verwendet BULK INSERT. Liest CSV direkt ein und umgeht den SQL-Parser. 10- bis 100-mal schneller für große Dateien (100K+ Zeilen). Erfordert Dateisystemzugriff auf dem Server oder Client.

Codebeispiele

Diese Beispiele zeigen, wie CSV in SQL INSERT-Anweisungen in verschiedenen Programmiersprachen umgewandelt werden kann. Jedes Beispiel behandelt die Maskierung einfacher Anführungszeichen und die Bereinigung von Spaltennamen.

JavaScript (Node.js)
// CSV → SQL INSERT statements
const csv = `name,age,city
Alice,30,Berlin
Bob,25,Tokyo`

function csvToSql(csv, table = 'data') {
  const rows = csv.trim().split('\n').map(r => r.split(','))
  const [headers, ...data] = rows
  const cols = headers.map(h => h.trim().toLowerCase().replace(/\s+/g, '_'))

  const values = data.map(row =>
    '  (' + row.map(v => `'${v.replace(/'/g, "''").trim()}'`).join(', ') + ')'
  )

  return `INSERT INTO ${table} (${cols.join(', ')}) VALUES
${values.join(',\n')};`
}

console.log(csvToSql(csv, 'users'))
// → INSERT INTO users (name, age, city) VALUES
//     ('Alice', '30', 'Berlin'),
//     ('Bob', '25', 'Tokyo');
Python
import csv
import io

csv_string = """name,age,city
Alice,30,Berlin
Bob,25,Tokyo"""

reader = csv.reader(io.StringIO(csv_string))
headers = [h.strip().lower().replace(' ', '_') for h in next(reader)]

table = 'users'
rows = list(reader)

# CREATE TABLE
col_defs = ', '.join(f'{h} TEXT' for h in headers)
print(f'CREATE TABLE {table} ({col_defs});')
# → CREATE TABLE users (name TEXT, age TEXT, city TEXT);

# INSERT statements
for row in rows:
    vals = ', '.join(f"'{v.replace(chr(39), chr(39)*2)}'" for v in row)
    print(f"INSERT INTO {table} ({', '.join(headers)}) VALUES ({vals});")
# → INSERT INTO users (name, age, city) VALUES ('Alice', '30', 'Berlin');
# → INSERT INTO users (name, age, city) VALUES ('Bob', '25', 'Tokyo');
Go
package main

import (
	"encoding/csv"
	"fmt"
	"strings"
)

func csvToSQL(data, table string) string {
	r := csv.NewReader(strings.NewReader(data))
	records, _ := r.ReadAll()
	if len(records) < 2 {
		return ""
	}

	headers := records[0]
	var vals []string
	for _, row := range records[1:] {
		escaped := make([]string, len(row))
		for i, v := range row {
			escaped[i] = "'" + strings.ReplaceAll(v, "'", "''") + "'"
		}
		vals = append(vals, "  ("+strings.Join(escaped, ", ")+")")
	}

	return fmt.Sprintf("INSERT INTO %s (%s) VALUES\n%s;",
		table, strings.Join(headers, ", "), strings.Join(vals, ",\n"))
}

func main() {
	csv := "name,age,city\nAlice,30,Berlin\nBob,25,Tokyo"
	fmt.Println(csvToSQL(csv, "users"))
	// → INSERT INTO users (name, age, city) VALUES
	//     ('Alice', '30', 'Berlin'),
	//     ('Bob', '25', 'Tokyo');
}
CLI (sqlite3 / psql)
# SQLite: import CSV directly into a table
sqlite3 mydb.db <<EOF
.mode csv
.import data.csv users
SELECT * FROM users LIMIT 5;
EOF

# PostgreSQL: COPY from CSV file (server-side)
psql -c "COPY users FROM '/path/to/data.csv' WITH (FORMAT csv, HEADER true);"

# PostgreSQL: \copy from CSV (client-side, no superuser needed)
psql -c "\copy users FROM 'data.csv' WITH (FORMAT csv, HEADER true);"

# MySQL: LOAD DATA from CSV
mysql -e "LOAD DATA INFILE '/path/to/data.csv' INTO TABLE users
  FIELDS TERMINATED BY ',' ENCLOSED BY '"'
  LINES TERMINATED BY '\n' IGNORE 1 ROWS;"

Häufig gestellte Fragen

Wie werden einfache Anführungszeichen in CSV-Werten in der SQL-Ausgabe behandelt?
Jedes einfache Anführungszeichen (') in einem CSV-Wert wird in der SQL-Ausgabe zu '' verdoppelt. Dies ist die SQL-Standard-Escape-Sequenz. Ein Wert wie "O'Brien" wird in der INSERT-Anweisung zu 'O''Brien'. Dies funktioniert in PostgreSQL, MySQL, SQLite und SQL Server.
Kann ich CSV für eine bestimmte Datenbank wie MySQL oder PostgreSQL in SQL umwandeln?
Die generierten INSERT-Anweisungen verwenden Standard-SQL-Syntax, die sowohl MySQL als auch PostgreSQL akzeptieren. Der Hauptunterschied liegt im Anführungszeichen bei Bezeichnern: PostgreSQL verwendet doppelte Anführungszeichen, MySQL verwendet Backticks. Für einfache INSERT-Operationen funktioniert die Ausgabe in beiden Systemen ohne Anpassung.
Was passiert, wenn meine CSV keine Kopfzeile hat?
Der Konverter behandelt die erste Zeile als Spaltenüberschriften. Wenn Ihre CSV keine Überschriften hat, fügen Sie vor der Konvertierung eine Kopfzeile hinzu, oder die erste Datenzeile wird zu den Spaltennamen in der CREATE TABLE-Anweisung. Die meisten Konverter, einschließlich dieses, erfordern eine Kopfzeile.
Gibt es ein Zeilenlimit für die CSV-zu-SQL-Konvertierung?
Da die Konvertierung im Browser läuft, hängt das praktische Limit vom Arbeitsspeicher Ihres Geräts ab. Dateien mit Zehntausenden von Zeilen werden problemlos konvertiert. Für sehr große Dateien (500K+ Zeilen) sollten Sie stattdessen den nativen COPY- oder LOAD DATA-Befehl der Datenbank verwenden.
Warum verwendet die Ausgabe TEXT für alle Spalten statt INTEGER oder DATE?
CSV ist ein Nur-Text-Format ohne Typmetadaten. Der Konverter verwendet TEXT als sicheren Standard, um fehlerhafte Typrückschlüsse zu vermeiden. Sie können die Spaltentypen in der generierten CREATE TABLE-Anweisung nach der Überprüfung Ihrer Daten anpassen. INTEGER für numerische Spalten und DATE für Datumsspalten sind häufige Anpassungen.
Wie gehe ich mit CSV-Dateien um, die Semikolons oder Tabs als Trennzeichen verwenden?
Dieses Tool erkennt das Trennzeichen automatisch, indem es die erste Zeile der CSV analysiert. Es prüft auf Kommas, Semikolons, Tabs und Pipe-Zeichen und verwendet das am häufigsten vorkommende. Europäische CSVs mit Semikolons funktionieren ohne jede Konfigurationsänderung.
Ist das generierte SQL vor Injection sicher, wenn ich es direkt ausführe?
Die Ausgabe maskiert einfache Anführungszeichen, was versehentliche Syntaxfehler verhindert. Stammen Ihre CSV-Daten jedoch aus einer nicht vertrauenswürdigen Quelle, behandeln Sie das generierte SQL wie jede andere ungeprüfte Eingabe. Prüfen Sie die Ausgabe, bevor Sie sie gegen eine Produktionsdatenbank ausführen. Für programmgesteuerte Importe sind parametrisierte Abfragen immer sicherer als String-Konkatenation.