ToolActToolAct

Excel-zu-SQL-Konverter

Excel-Datei hochladen, um sie in SQL-INSERT-Anweisungen zu konvertieren

Excel-Datei hier ablegen oder klicken, um eine Datei auszuwählen

Was ist Excel zu SQL?

Excel zu SQL ist ein Online-Datenformatkonvertierungstool, das Excel-Dateien (.xlsx/.xls) in SQL-INSERT-Anweisungen konvertiert, um den Import in Datenbanken zu erleichtern.

Excel ist das am häufigsten verwendete Tabellenkalkulationsformat, das weit verbreitet für Datenspeicherung und -analyse verwendet wird. SQL ist die standardmäßige Abfragesprache für relationale Datenbanken, und INSERT-Anweisungen werden verwendet, um Daten in Datenbanktabellen einzufügen.

Mit diesem Tool können Sie Excel-Tabellendaten schnell in ausführbare SQL-Anweisungen konvertieren. Es unterstützt die Auswahl mehrerer Tabellenblätter, benutzerdefinierte Tabellennamen und Anführungszeichen-Stile für einfache Datenmigration und Importvorgänge.

Besonders bei produktiven Daten oder Codebasen sollte das Ergebnis anschließend mit Parser, Tests oder Projektregeln geprüft werden.

So geht's

So geht's

  1. Laden Sie eine Excel-Datei hoch (.xlsx oder .xls)
  2. Sind mehrere Tabellenblätter vorhanden, wählen Sie das gewünschte aus
  3. Legen Sie den Tabellennamen fest (Standard: table_name)
  4. Wählen Sie, ob die erste Zeile als Feldnamen dienen soll
  5. SQL-INSERT-Anweisungen werden automatisch erzeugt und sind mit einem Klick kopierbereit

SQL-Erstellung prüfen

  • Prüfen Sie Spaltennamen, Datentypen, Anführungszeichen und NULL-Behandlung, bevor Sie das erzeugte SQL auf einer echten Datenbank ausführen.
  • Testen Sie vor Produktiv-Importen zunächst in einer temporären Tabelle und sichern Sie die ursprüngliche Tabellenkalkulation.

Anwendungsfälle

SQL aus einem ausgewählten Arbeitsblatt generierenEine Excel-Datei hochladen, das Blatt auswählen, einen Tabellennamen festlegen und INSERT-Anweisungen aus Kopfnamen oder generierten col1, col2, col3-Spaltennamen erzeugen. Die gesamte Pipeline läuft auf dem Gerät – die Inhalte der Quelltabelle verlassen den Browser nie, was bei internen Preislisten, HR-Daten oder Staging-Snapshots hilfreich ist, die das Notebook nicht verlassen sollten.
Bezeichner-Zitierung für den Entwurf der Zieldatenbank abstimmenTabellen- und Spaltenzitierung zwischen Akutzeichen, doppelten und einfachen Anführungszeichen umschalten und optional eine einfache VARCHAR(255)-CREATE TABLE-Anweisung einbeziehen. Parsing und SQL-Generierung erfolgen lokal – ein Entwurfsskript kann auf Spaltennamen, Datentypen und Zitierungsverhalten geprüft werden, bevor es auf der Zieldatenbank ausgeführt wird.
Lokale Stammdaten mit klaren Einschränkungen vorbereitenDer Konverter erhält Zellwerte als SQL-Zeichenfolgen oder NULL und escapet einfache Anführungszeichen, aber er erkennt keine Typen, Einschränkungen, Indizes, Datumsssemantik, Transaktionen oder Bulk-Load-Syntax. Die Ausgabe als Entwurf für Stammdaten behandeln, nicht als fertige Migration.
Den passenden Zitierungsstil für das Ziel-RDBMS wählenMySQL und SQLite akzepten Akutzeichen, PostgreSQL verlangt doppelte Anführungszeichen und SQL Server bevorzugt eckige Klammern – den passenden Stil im Dropdown wählen, damit das generierte Skript in der Zielkonsole ohne manuelle Bearbeitung läuft. Beachte: SQLite behandelt doppelt gezeichnete Bezeichner als Zeichenfolgenliteral, wenn kein DUAL-Spaltenkontext vorliegt – der sichere dialektübergreifende Standard ist der Einzelanführungszeichen-Wertestil mit Akutzeichen oder Klammern für Tabellen-/Spaltennamen. Die Typerkennung ist ebenfalls rein lexikalisch: Eine Spalte, deren erste nicht leere Zelle 1, 2, 3 ist, wird INT; eine Spalte, die mit 2024-01-01 beginnt, wird als Zeichenfolge exportiert, obwohl sie wie ein Datum aussieht; und Währungszellen mit Tausendertrennzeichen werden mit diesem Trennzeichen innerhalb der Zeichenfolge exportiert.
Mehrzeilige Inserts in eine Transaktion einbettenDie Seite gibt ein INSERT pro Zeile aus, was bei großen Imports langsam und unsicher ist. Den gesamten Block in ein BEGIN/COMMIT-Paar einfügen oder den Bulk-Loader der Datenbank verwenden, wenn mehrere hundert Zeilen in eine produktive Datenbank geschoben werden. Die Kopfzeilenerkennung durchsucht die erste nicht leere Zeile des gewählten Blatts und gibt `INSERT INTO ... (col1, col2, ...)` basierend auf dessen Text aus; DATE-Zellen werden über die Excel-Seriennummer-Konvention gelesen (Tage seit 1900-01-01 mit dem 1900-Schaltjahresbug, der den 1. März um einen Tag verschiebt, sodass 25569 der 1970-01-01-Unix-Epochenstart ist). Formelzellen, die nicht neu berechnet wurden, tragen einen veralteten `.value`, und zusammengeführte Zellbereiche geben nur den Anker oben links aus – eine breite zusammengeführte Titelzeile sieht für den Parser wie ein einzelnes NULL aus.

Technisches Prinzip

Die Seite parst die hochgeladene Arbeitsmappe mit SheetJS – XLSX.read(arrayBuffer, {type: 'array'}) gibt ein Arbeitsmappenobjekt zurück, dessen Arbeitsblatt Zellen nach A1-Schlüsseln indexiert hat, dann wandelt XLSX.utils.sheet_to_json(sheet, {header: 1, defval: null}) den begrenzten !ref-Bereich in ein Array von Arrays um. Die erste nicht leere Zeile (wenn „Erste Zeile als Spaltenüberschriften“ aktiviert ist) wird als Spaltennamen verwendet; andernfalls werden SheetJS-artige col1, col2, col3 erzeugt. Jede verbleibende Zeile wird als einzelne SQL-Anweisung der Form INSERT INTO `table` (`c1`, `c2`, ...) VALUES (v1, v2, ...); ausgegeben, optional mit vorangestelltem CREATE TABLE `table` (`c1` VARCHAR(255), ...);. Bezeichner-Zitierung variiert je nach SQL-Dialekt und wird durch den SQL:1992-Standard und die jeweilige Abweichung des Herstellers bestimmt: Standard-SQL und PostgreSQL zitieren Bezeichner mit doppelten Anführungszeichen ("col"), MySQL und MariaDB verwenden standardmäßig Akutzeichen (`col`) und akzeptieren doppelte Anführungszeichen nur bei aktiviertem ANSI_QUOTES-SQL-Modus, SQLite akzeptiert sowohl Akutzeichen als auch doppelte Anführungszeichen (und behandelt aus Kompatibilitätsgründen doppelt zitierte Bezeichner, die nicht aufgelöst werden können, als Zeichenkettenliteral – eine bekannte Stolperfalle, die in der SQLite-Quirks-Seite dokumentiert ist), SQL Server und Sybase verwenden eckige Klammern ([col]). Wert-Zitierung folgt den SQL-Zeichenkettenliteral-Regeln: einfache Anführungszeichen umschließen das Literal und werden durch Verdopplung maskiert ('O''Brien'), gemäß ISO/IEC 9075. Leere Zellen werden zum unzitierten Literal NULL, nicht zur leeren Zeichenkette ''; numerische Zellen mit cell.t === 'n` werden unzitiert ausgegeben; Booleans werden zu 1/0 oder TRUE/FALSE je nach Dialekt; Daten erfordern besondere Behandlung. Datumszellen benötigen besondere Aufmerksamkeit, da SheetJS die zugrunde liegende numerische Seriennummer bewahrt: Excel speichert Daten als Tage seit 1900-01-01 mit dem historischen Schaltjahresbug von 1900-02-29, der Daten vor März 1900 um einen Tag verschiebt, und das Excel-für-Mac-1904-System verwendet 1904-01-01 als Epochenstart. Die Konvertierung zu ISO 8601 (YYYY-MM-DD HH:mm:ss, das Format, das sowohl MySQL DATETIME als auch PostgreSQL TIMESTAMP akzeptieren) ist (serial - 25569) * 86400000 ms nach der Unix-Epoche, dann in UTC formatiert. Typerkennung ist rein lexikalisch und oberflächlich: eine Spalte, deren erste nicht leere Zelle eine Ganzzahl ist, wird INT, Dezimalzahlen werden DECIMAL(10,2), Text wird VARCHAR(255), und eine Spalte, die mit 2024-01-01 beginnt, kann als Zeichenkette exportiert werden, es sei denn, die Quellzelle trägt cell.t === 'd'. Bulk-Inserts werden als ein INSERT pro Zeile ausgegeben, was in großem Maßstab langsam ist; das Zusammenfassen von 100-500 Zeilen in ein einzelnes INSERT INTO t VALUES (...), (...), ...; reduziert die Netzwerk-Rundläufe um ca. 100x, und das Einwickeln des Skripts in BEGIN; ... COMMIT; macht den Import zu einer atomaren Transaktion, die beim ersten fehlschlagenden Zeile zurückgerollt wird.

  • Bezeichner-Zitierung je nach Dialekt: MySQL/MariaDB `col` (Akutzeichen, oder "col" mit ANSI_QUOTES aktiv); PostgreSQL und Standard-SQL "col"; SQL Server [col]; SQLite akzeptiert beide (aber "col" fällt stillschweigend auf ein Zeichenkettenliteral zurück, wenn col kein bekannter Bezeichner ist).
  • Zeichenkettenliteral-Maskierung (ISO/IEC 9075): mit einfachen Anführungszeichen umschließen und interne einfache Anführungszeichen verdoppeln (O'Brien → 'O''Brien'); niemals rohe Backslashes inline verwenden – PostgreSQL standard_conforming_strings ist seit 9.1 standardmäßig aktiv.
  • Excel-Datumsseriennummer: Tage seit 1900-01-01 mit dem 1900-02-29-Bug (oder 1904-01-01 wenn workbook.date1904 wahr ist); ISO 8601-Zeichenkette = new Date((serial - 25569) * 86400000).toISOString().
  • Typerkennung ist lexikalisch: Ganzzahlen → INT, Dezimalzahlen → DECIMAL(10,2), Text → VARCHAR(255); Daten, die wie Daten aussehen, aber nicht als cell.t === 'd' typisiert sind, werden als Zeichenketten exportiert; Währungszellen mit Tausendertrennzeichen werden mit dem Trennzeichen innerhalb der Zeichenkette exportiert.
  • NULL-Behandlung: eine leere Excel-Zelle wird zum unzitierten Literal NULL, nicht zu '' – der Unterschied ist wichtig für NOT NULL-Spalten und für COUNT(col), das NULLs überspringt, aber '' zählt.
  • Bulk-Insert: 100-500 Zeilen in ein einzelnes INSERT INTO t VALUES (...),(...),...; zusammenzufassen reduziert Netzwerk-Rundläufe um ca. 100x gegenüber einem INSERT pro Zeile; MySQLs max_allowed_packet (Standard 64 MB) begrenzt die Größe pro Anweisung.
  • Das erzeugte Skript in BEGIN;...COMMIT; (PostgreSQL/SQLite) oder START TRANSACTION;...COMMIT; (MySQL InnoDB) einwickeln, damit eine einzelne fehlschlagende Zeile den gesamten Batch zurückrollt; MyISAM-Tabellen ignorieren die Transaktion und committen teilweise.

Beispiele

Excel-Tabelle → INSERT-Anweisungen

Tabelle "users" (3 Zeilen):
id | name    | email             | age
1  | Alice   | alice@mail.com    | 28
2  | Bob     | bob@mail.com      | 34

Generierter SQL:
INSERT INTO users (id, name, email, age) VALUES (1, 'Alice', 'alice@mail.com', 28);
INSERT INTO users (id, name, email, age) VALUES (2, 'Bob', 'bob@mail.com', 34);

Einzelnes mehrzeiliges INSERT (schnellerer Import)

Verwende die Option "Zeilen kombinieren" für Massenladungen:

INSERT INTO products (sku, name, price) VALUES
  ('A001', 'USB-C Cable',  9.90),
  ('A002', 'HDMI Adapter', 14.50),
  ('A003', 'Mouse Pad',    4.25);

Reduziert 3 Roundtrips auf 1 — sicherer für Stapel von 100-500 Zeilen.

Anführungszeichen-Escaping bei Namen mit Apostroph

Quellzelle: O'Brien

Generierter SQL (einfache Anführungszeichen verdoppelt):
INSERT INTO customers (id, name) VALUES (42, 'O''Brien');

NULL-Behandlung — leere Excel-Zelle wird zu literalem NULL, nicht zu '':
INSERT INTO customers (id, phone) VALUES (43, NULL);

Import in eine Transaktion einpacken

BEGIN;
INSERT INTO orders (id, customer_id, total, created_at) VALUES (1001, 7, 199.50, '2026-06-01');
INSERT INTO orders (id, customer_id, total, created_at) VALUES (1002, 7, 42.00,  '2026-06-02');
INSERT INTO orders (id, customer_id, total, created_at) VALUES (1003, 9, 78.30,  '2026-06-03');
COMMIT;

Wenn eine Zeile fehlschlägt, wird der gesamte Stapel zurückgerollt.

FAQ

Wird die Tabelle hochgeladen?

Nein. Die Datei wird in deinem Browser über SheetJS geparst und das SQL lokal generiert. Es wird nichts an einen Server gesendet, also bleiben auch sensible Datensätze auf deinem Gerät.

Welche SQL-Ausgabe wird erzeugt?

Eine CREATE TABLE-Anweisung gefolgt von einzelnen INSERT INTO-Zeilen (eine Zeile pro Anweisung). Das generierte SQL verwendet den von dir eingegebenen Tabellennamen und den von dir gewählten Anführungszeichen-Stil (einfach, doppelt oder Backtick).

Wie werden Spaltentypen abgeleitet?

Die Seite tastet jede Spalte ab und wählt den engsten passenden Typ: INTEGER, DECIMAL, VARCHAR(N), BOOLEAN oder DATE/DATETIME. Du kannst das vor dem Generieren des SQL überschreiben. Spalten mit gemischten Typen fallen auf VARCHAR zurück.

Was ist mit Excel-Datumsangaben?

Excel speichert Datumsangaben als Seriennummern. Die Seite gibt sie als Rohwert aus dem Tabellenblatt aus. Prüfe das generierte SQL und passe Datumsliterale bei Bedarf an das Format deiner Zieldatenbank an.

Wie werden Sonderzeichen und Anführungszeichen escaped?

Einfache Anführungszeichen werden verdoppelt (Smith's → Smith''s). Backslashes und Unicode werden wörtlich durchgereicht — das entspricht den standardkonformen Strings von PostgreSQL. Wenn du auf MySQL mit deaktiviertem NO_BACKSLASH_ESCAPES zielst, musst du Backslashes ggf. manuell escapen.

Funktioniert das Ergebnis auf MySQL, PostgreSQL, SQLite und MSSQL?

Die einfachen INSERTs funktionieren auf allen vier. Die CREATE TABLE-Anweisung verwendet portable Typen (INT, VARCHAR, DECIMAL, DATE). Für dialekt-spezifische Typen (SERIAL, AUTO_INCREMENT, IDENTITY) musst du die CREATE-Anweisung an dein Ziel anpassen.

Werden Formeln ausgewertet?

Nein. Es wird der von Excel gespeicherte zwischengespeicherte Wert verwendet. Öffne die Quelldatei, lasse neu berechnen, speichere und lade sie erneut hoch, wenn du frische Formelwerte brauchst.