Excel in eine Datenbank importieren

Am einfachsten importierst du Excel in eine Datenbank, indem du die Tabelle in SQL umwandelst: einen CREATE-TABLE-Befehl mit passenden Spaltentypen und INSERT-Befehle für die Zeilen, die du in SQL Server Management Studio, MySQL Workbench, pgAdmin oder einem anderen Client ausführst. Der Konverter auf dieser Seite schreibt dieses SQL in deinem Browser für SQL Server, MySQL, PostgreSQL und SQLite; für Millionen von Zeilen exportierst du besser eine CSV und nutzt den Massenimport der Datenbank.

6 Min. Lesezeit

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 öffnen

Zuerst 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

MethodeGut fürWorauf du achten musst
Erzeugtes SQL (diese Seite)Bis zu zehntausende Zeilen, jede Datenbank, prüfbares SkriptSehr große Dateien ergeben sehr große Skripte
SQL Server Import/Export-AssistentRegelmäßige Importe in SQL ServerZum Lesen von .xlsx braucht er die Microsoft Access Database Engine; 32 Bit und 64 Bit müssen zusammenpassen
SSMS Flatfile importierenCSV in SQL ServerDie erratenen Typen vor dem Abschluss prüfen
BULK INSERT (SQL Server), LOAD DATA (MySQL), COPY (PostgreSQL)Millionen von Zeilen aus einer CSVDateizugriffsrechte auf dem Server, Optionen für Trennzeichen und Zeichenkodierung
MySQL Workbench Table Data Import WizardCSV oder JSON in MySQLLangsam bei großen Dateien
pgAdmin Import/ExportCSV in eine vorhandene PostgreSQL-TabelleDie Tabelle muss vorher existieren
Der Befehl .import der sqlite3-Shell (csv-Modus)CSV in SQLiteSpalten 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 SpalteSQL ServerMySQLPostgreSQLSQLite
Ganze ZahlenINT oder BIGINTINT oder BIGINTINTEGER oder BIGINTINTEGER
DezimalzahlenDECIMAL(p, s)DECIMAL(p, s)NUMERIC(p, s)REAL
wahr oder falschBITTINYINT(1)BOOLEANINTEGER
DatumDATEDATEDATETEXT
Datum und UhrzeitDATETIME2DATETIMETIMESTAMPTEXT
Text, Codes mit führenden NullenNVARCHAR(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.

Schritt für Schritt

  1. Daten hinzufügenÖffne eine .xlsx- oder .csv-Datei, oder kopier Zellen in Excel und füg sie in das Eingabefeld ein.
  2. Datenbank und Tabelle wählenWähle unter Datenbank SQL Server, MySQL, PostgreSQL oder SQLite und gib den Tabellennamen ein.
  3. Optionen einstellenWähle Zeilen pro INSERT und hake je nach Bedarf CREATE TABLE, Tabelle vorher löschen, Transaktion verwenden oder Namen vereinfachen an.
  4. Spaltentypen prüfenLies den CREATE-TABLE-Teil des Ergebnisses und achte darauf, dass Codes Text sind und Zahlen numerisch.
  5. SQL ausführenKopier das Skript oder lade die .sql-Datei herunter und führ sie in deinem Datenbank-Client aus.

Häufige Fragen

Kann ich eine Excel-Datei direkt in SQL Server importieren?

Ja, mit dem SQL Server Import/Export-Assistenten, aber zum Lesen von .xlsx muss die Microsoft Access Database Engine auf dem Rechner installiert sein. INSERT-Befehle zu erzeugen umgeht diese Abhängigkeit und funktioniert mit jedem SQL-Server-Client.

Wird meine Tabelle zum Umwandeln hochgeladen?

Nein. Die Datei wird in deinem Browser gelesen und das SQL dort erzeugt. Nichts wird an einen Server geschickt, was bei Kundenlisten und Preisdateien wichtig ist.

Wie viele Zeilen kann ich mit INSERT-Befehlen importieren?

Zehntausende Zeilen funktionieren gut. Für Millionen von Zeilen nimmst du einen Massenimport wie BULK INSERT, LOAD DATA oder COPY mit einer CSV-Datei.

Werden alte .xls-Dateien unterstützt?

Nein. Öffne die Datei in Excel oder LibreOffice, speichere sie als .xlsx und öffne diese Kopie. CSV-Dateien funktionieren auch.

Kann ich Zeilen zu einer vorhandenen Tabelle hinzufügen?

Ja. Schalte CREATE TABLE und Tabelle vorher löschen aus, gib den Namen der vorhandenen Tabelle ein und achte darauf, dass die Spaltennamen übereinstimmen. Dann werden nur die INSERT-Befehle geschrieben.

Funktioniert das offline?

Ja. Wenn die Seite einmal geöffnet wurde, funktioniert sie auch ohne Internetverbindung weiter.