Die kurze Antwort
Eine Datenbank kann eine .xlsx-Datei nicht von selbst lesen. Irgendetwas muss die Tabelle lesen, für jede Spalte den Typ bestimmen, eine Tabelle anlegen und die Zeilen einfügen. Das kann der Importassistent deiner Datenbank übernehmen, du kannst eine CSV mit einem Massenimport-Befehl laden, oder du erzeugst reines SQL, das jeder Datenbank-Client ausführen kann.
Erzeugtes SQL ist die flexibelste Variante und am leichtesten zu prüfen, denn du siehst genau, was angelegt wird, bevor irgendetwas die Datenbank berührt. Öffne im Konverter unten die .xlsx- oder .csv-Datei (oder füg aus Excel kopierte Zellen ein), wähle die Datenbank, gib den Tabellennamen ein und kopier das Skript oder lade es herunter. Die Spaltentypen werden aus den Daten erkannt, und Barcodes oder Codes mit führenden Nullen bleiben Text.
Hier ausprobieren: Excel in SQL
Vollständige Tool-Seite öffnenZuerst die Tabelle vorbereiten
Die meisten gescheiterten Importe liegen an der Tabellenkalkulation, nicht an der Datenbank. Excel-Tabellen sind für Menschen gemacht; Datenbanktabellen brauchen ein sauberes Rechteck aus Daten. Nimm dir vor jedem Import zwei Minuten dafür:
- Genau eine Kopfzeile mit eindeutigen Spaltennamen. Entferne Überschriften über der Tabelle, verbundene Kopfzellen und zweite Kopfzeilen.
- Eine Zeile pro Datensatz. Lösch Summen- und Zwischensummenzeilen, leere Trennzeilen und Notizen unter den Daten.
- Nur eine Art von Wert pro Spalte. In einer Spalte Preis sollte nicht in manchen Zeilen der Text auf Anfrage stehen; lass die Zelle stattdessen leer, sie wird zu NULL.
- Keine verbundenen Zellen innerhalb der Daten. Heb die Verbindung auf und trag den Wert in jede Zeile ein, für die er gilt.
- Formeln sind kein Problem: Verwendet wird der zuletzt berechnete Wert, der in der Datei gespeichert ist. Achte darauf, dass die Mappe nach der letzten Änderung neu berechnet und gespeichert wurde.
- Leg jede Tabelle auf ein eigenes Tabellenblatt. Wenn eine Mappe mehrere Blätter hat, zeigt der Konverter eine Auswahl Tabellenblatt.
Die Methoden im Vergleich
| Methode | Gut für | Worauf du achten musst |
|---|---|---|
| Erzeugtes SQL (diese Seite) | Bis zu zehntausende Zeilen, jede Datenbank, prüfbares Skript | Sehr große Dateien ergeben sehr große Skripte |
| SQL Server Import/Export-Assistent | Regelmäßige Importe in SQL Server | Zum Lesen von .xlsx braucht er die Microsoft Access Database Engine; 32 Bit und 64 Bit müssen zusammenpassen |
| SSMS Flatfile importieren | CSV in SQL Server | Die erratenen Typen vor dem Abschluss prüfen |
| BULK INSERT (SQL Server), LOAD DATA (MySQL), COPY (PostgreSQL) | Millionen von Zeilen aus einer CSV | Dateizugriffsrechte auf dem Server, Optionen für Trennzeichen und Zeichenkodierung |
| MySQL Workbench Table Data Import Wizard | CSV oder JSON in MySQL | Langsam bei großen Dateien |
| pgAdmin Import/Export | CSV in eine vorhandene PostgreSQL-Tabelle | Die Tabelle muss vorher existieren |
| Der Befehl .import der sqlite3-Shell (csv-Modus) | CSV in SQLite | Spalten werden als TEXT angelegt, wenn die Tabelle noch nicht existiert |
Schritt für Schritt mit erzeugtem SQL
- Öffne die Datei oder füg die Zellen ein. Die erste Zeile wird zu den Spaltennamen; schalte Erste Zeile ist Kopfzeile aus, wenn deine Daten keine haben.
- Wähle die Datenbank: SQL Server, MySQL, PostgreSQL oder SQLite. Anführungszeichen, Typen und Maskierung richten sich danach.
- Gib den Tabellennamen ein. Mit Namen vereinfachen wird aus Produkt Name produkt_name, das erspart dir in jeder späteren Abfrage Anführungszeichen um die Namen.
- Wähle Zeilen pro INSERT. 100 ist ein sicherer Standardwert; größere Pakete importieren schneller. SQL Server akzeptiert höchstens 1000 Zeilen in einer VALUES-Liste, deshalb geht das Werkzeug für SQL Server nie darüber.
- Entscheide über die Extras: CREATE TABLE schreibt die Tabellendefinition, Tabelle vorher löschen entfernt eine vorhandene Tabelle mit demselben Namen (nutz das nur bei Tabellen, die du wirklich ersetzen willst), und Transaktion verwenden macht den Import zu einem Alles oder Nichts.
- Kopier das SQL oder lade die .sql-Datei herunter und führ sie in deinem Datenbank-Client aus.
Welche Spaltentypen der Konverter wählt
Jede Spalte bekommt den engsten Typ, in den jeder ihrer Werte passt. Textspalten bekommen eine Länge, die vom längsten Wert aus aufgerundet wird (zum Beispiel VARCHAR(50) bei höchstens 37 Zeichen), du kannst sie später also noch verbreitern.
| Daten in der Spalte | SQL Server | MySQL | PostgreSQL | SQLite |
|---|---|---|---|---|
| Ganze Zahlen | INT oder BIGINT | INT oder BIGINT | INTEGER oder BIGINT | INTEGER |
| Dezimalzahlen | DECIMAL(p, s) | DECIMAL(p, s) | NUMERIC(p, s) | REAL |
| wahr oder falsch | BIT | TINYINT(1) | BOOLEAN | INTEGER |
| Datum | DATE | DATE | DATE | TEXT |
| Datum und Uhrzeit | DATETIME2 | DATETIME | TIMESTAMP | TEXT |
| Text, Codes mit führenden Nullen | NVARCHAR(n) | VARCHAR(n) | VARCHAR(n) | TEXT |
Häufige Probleme und wie du sie vermeidest
- Datumsangaben kommen als Zahlen wie 45000 an. Excel speichert ein Datum als Anzahl von Tagen (45000 ist der 15. März 2023). Wenn du eine .xlsx mit dem Konverter liest, werden Datumszellen wieder in echte Datumswerte umgewandelt; andere Werkzeuge brauchen dafür eventuell eine Spalte, die als Datum formatiert ist.
- Führende Nullen verschwinden. Barcodes, Postleitzahlen wie 01067 und Artikelnummern wie 00123 müssen Text sein. Der Konverter lässt eine Spalte als Text, wenn ihre Werte mit einer Null beginnen, und auch Zahlen mit mehr als 15 Stellen bleiben Text.
- Umlaute und ß werden in SQL Server zu Fragezeichen. Unicode-Text braucht NVARCHAR-Spalten und das Präfix N vor Zeichenketten; das erzeugte Skript für SQL Server nutzt beides. In MySQL nimmst du eine Tabelle mit utf8mb4.
- Zahlen mit Dezimalkomma. In CSV-Dateien mit Semikolon, wie sie ein deutsches Excel speichert, werden Werte wie 1.499,90 als 1499.90 gelesen. In CSV-Dateien mit Komma ist das Komma ein Spaltentrenner, solche Werte müssen dort in Anführungszeichen stehen.
- Leere Zellen. Sie werden zu NULL, und die Spalte wird als NULL-fähig angelegt. Wenn du stattdessen leeren Text willst, änderst du das nach dem Import.
- Anführungszeichen im Text. Ein Apostroph wie in O'Brien würde einen von Hand geschriebenen INSERT kaputt machen; erzeugte Werte werden maskiert, und in MySQL auch Backslashes.
Wann ein Massenimport besser ist
INSERT-Skripte sind ideal für ein paar tausend bis zehntausende Zeilen: Du kannst sie lesen, in der Versionsverwaltung ablegen und überall ausführen. Bei hunderttausenden oder Millionen von Zeilen wird das Skript sehr groß, und es auszuführen dauert länger als ein Massenimport.
Speichere die Tabelle in dem Fall als CSV UTF-8 und nutz den Massenimport-Befehl deiner Datenbank: BULK INSERT in SQL Server, LOAD DATA LOCAL INFILE in MySQL, COPY oder \copy von psql in PostgreSQL. Ein guter Mittelweg: Lass den Konverter aus einer Stichprobe der Daten nur den CREATE-TABLE-Befehl schreiben, damit du sinnvolle Spaltentypen bekommst, und lade dann die ganze CSV mit dem Massenimport-Befehl in diese Tabelle.