Freigeben über


Importieren von Daten aus Excel in SQL Server oder Azure SQL-Datenbank

Gilt für: SQL Server Azure SQL-Datenbank

Es gibt verschiedene Möglichkeiten, Daten aus Excel in SQL Server oder Azure SQL-Datenbank zu importieren. Bei einigen Methoden können Sie Daten in einem einzigen Schritt direkt aus Excel-Dateien importieren; bei anderen Methoden müssen Sie Ihre Excel-Daten als Text exportieren (CSV-Datei), bevor Sie diese importieren können.

Dieser Artikel fasst die häufig verwendeten Methoden zusammen und enthält Links zu weiterführenden Informationen. Eine vollständige Beschreibung der komplexen Tools wie SSIS oder Azure Data Factory würde den Rahmen dieses Artikels sprengen. Für mehr Informationen über die Lösung zu erfahren, für die Sie sich interessieren, folgen Sie den Links.

Liste der Methoden

Es gibt mehrere Möglichkeiten, Daten aus Excel zu importieren. Sie müssen SQL Server Management Studio (SSMS) installieren, um einige dieser Tools zu verwenden.

Sie können die folgenden Tools verwenden, um Daten aus Excel zu importieren:

Export zunächst als Text (SQL Server und Azure SQL-Datenbank) Direkt aus Excel (nur lokaler SQL Server)
Assistent zum Importieren von Flatfiles SQL Server-Import/Export-Assistent
BULK INSERT-Anweisung SQL Server Integration Services (SSIS)
Massenkopieren-Tool (bcp) OPENROWSET-Funktion
Kopier-Assistent (Azure Data Factory)
Azure Data Factory

Wenn Sie mehrere Arbeitsblätter aus einer Excel-Arbeitsmappe importieren möchten, müssen Sie normalerweise jedes dieser Tools einmal für jedes Arbeitsblatt ausführen.

Weitere Informationen finden Sie unter Einschränkungen und bekannte Probleme beim Laden in oder aus Excel-Dateien.

Import/Export-Assistent

Importieren Sie Daten direkt aus Excel-Dateien, indem Sie den SQL Server-Import/Export-Assistenten verwenden. Sie haben auch die Möglichkeit, die Einstellungen als SQL Server Integration Services-Paket (SSIS) zu speichern, das Sie später anpassen und wiederverwenden können.

  1. Stellen Sie in SQL Server Management Studio eine Verbindung mit einer Instanz von SQL Server Datenbank-Engine her.

  2. Erweitern Sie Datenbanken.

  3. Klicken Sie mit der rechten Maustaste auf eine Datenbank.

  4. Wählen Sie Aufgaben aus.

  5. Wählen Sie aus, ob Sie Daten importieren oder Daten exportieren möchten:

    Screetshot des Start-Assistenten SSMS.

Dadurch wird der Assistent gestartet:

Screenshot der Option „Mit Excel-Datenquelle verbinden“.

Weitere Informationen finden Sie in den folgenden Artikeln:

Integration Services (SSIS)

Wenn Sie mit SSIS (SQL Server Integration Services) vertraut sind und den SQL Server-Import/Export-Assistenten nicht ausführen möchten, können Sie ein SSIS-Paket erstellen, das stattdessen die Excel-Quelle und das SQL Server-Ziel im Datenfluss verwendet.

Weitere Informationen finden Sie in den folgenden Artikeln:

Erste Informationen zum Erstellen von SSIS-Paketen finden Sie im Tutorial Erstellen eines ETL-Pakets.

Screenshot der Komponenten im Datenfluss.

OPENROWSET und Verbindungsserver

Wichtig

In Azure SQL-Datenbank können Sie nicht direkt aus Excel importieren. Sie müssen die Daten zunächst als Text (CSV-Datei) exportieren.

Der ACE-Anbieter (früher der Jet-Anbieter), der die Verbindung mit Excel-Datenquellen herstellt, ist für die interaktive Verwendung auf Clientseite vorgesehen. Wenn Sie den ACE-Anbieter auf SQL Server verwenden – insbesondere in automatisierten oder parallel ausgeführten Prozessen –, kann dies zu unerwarteten Ergebnissen führen.

Verteilte Abfragen

Importieren Sie Daten in SQL Server mithilfe der Transact-SQL-Funktion OPENROWSET oder OPENDATASOURCE direkt aus Excel-Dateien. Diese Nutzung wird als verteilte Abfrage bezeichnet.

Wichtig

In Azure SQL-Datenbank können Sie nicht direkt aus Excel importieren. Sie müssen die Daten zunächst als Text (CSV-Datei) exportieren.

Bevor Sie eine verteilte Abfrage ausführen können, müssen Sie die Serverkonfigurationsoption Ad Hoc Distributed Queries aktivieren, wie in folgendem Beispiel gezeigt. Weitere Informationen finden Sie unter Serverkonfiguration: Ad Hoc verteilte Abfragen.

sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;
GO

Das folgende Codebeispiel verwendet OPENROWSET, um die Daten aus dem Excel-Arbeitsblatt Sheet1 in eine neue Datenbanktabelle zu importieren.

USE ImportFromExcel;
GO
SELECT * INTO Data_dq
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
    'Excel 12.0; Database=C:\Temp\Data.xlsx', [Sheet1$]);
GO

Hier sehen Sie das Beispiel mit OPENDATASOURCE.

USE ImportFromExcel;
GO
SELECT * INTO Data_dq
FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0',
    'Data Source=C:\Temp\Data.xlsx;Extended Properties=Excel 12.0')...[Sheet1$];
GO

Um die importierten Daten an eine vorhandene Tabelle anzufügen, anstatt eine neue Tabelle zu erstellen, verwenden Sie die Syntax INSERT INTO ... SELECT ... FROM ... anstelle der Syntax SELECT ... INTO ... FROM ... aus den vorherigen Beispielen.

Um die Excel-Daten abzufragen, ohne sie zu importieren, verwenden Sie einfach die Standardsyntax SELECT ... FROM ....

Weitere Informationen zu verteilten Abfragen finden Sie in den folgenden Artikeln:

1 Verteilte Abfragen werden in SQL Server weiterhin unterstützt, aber die Dokumentation für dieses Feature wird nicht aktualisiert.

Verknüpfte Server

Sie können auch eine dauerhafte Verbindung von SQL Server zur Excel-Datei in Form eines Verbindungsservers konfigurieren. Das folgende Beispiel importiert die Daten aus dem Arbeitsblatt Data auf dem vorhandenen Excel-Verbindungsserver EXCELLINK in eine neue SQL Server-Datenbanktabelle mit der Bezeichnung Data_ls.

USE ImportFromExcel;
GO
SELECT * INTO Data_ls FROM EXCELLINK...[Data$];
GO

Sie können einen Verbindungsserver über SQL Server Management Studio (SSMS) oder durch Ausführen der gespeicherten Systemprozedur sp_addlinkedserver erstellen, wie im folgenden Beispiel gezeigt.

DECLARE @RC INT;
DECLARE @server NVARCHAR(128);
DECLARE @srvproduct NVARCHAR(128);
DECLARE @provider NVARCHAR(128);
DECLARE @datasrc NVARCHAR(4000);
DECLARE @location NVARCHAR(4000);
DECLARE @provstr NVARCHAR(4000);
DECLARE @catalog NVARCHAR(128);

-- Set parameter values
SET @server = 'EXCELLINK';
SET @srvproduct = 'Excel';
SET @provider = 'Microsoft.ACE.OLEDB.12.0';
SET @datasrc = 'C:\Temp\Data.xlsx';
SET @provstr = 'Excel 12.0';

EXEC @RC = [master].[dbo].[sp_addlinkedserver] @server,
    @srvproduct,
    @provider,
    @datasrc,
    @location,
    @provstr,
    @catalog;

Weitere Informationen zu Verbindungsservern finden Sie in den folgenden Artikeln:

Weitere Beispiele und Informationen zu Verbindungsservern und verteilten Abfragen finden Sie in den folgenden Artikeln:

Voraussetzungen

Für die restlichen auf dieser Seite beschriebenen Methoden (die BULK INSERT-Anweisung, das bcp-Tool und Azure Data Factory) müssen Sie Ihre Excel-Daten zuerst in eine Textdatei exportieren.

Speichern von Excel-Daten als Text

Wählen Sie in Excel Datei > Speichern unter und dann als Zieldateityp Text (durch Tabstopps getrennt) (*.txt) oder CSV (durch Trennzeichen getrennt) (*.csv) aus.

Wenn Sie mehrere Arbeitsblätter aus der Arbeitsmappe exportieren möchten, wählen Sie jedes Blatt aus, und wiederholen Sie dann dieses Verfahren. Der Befehl Speichern unter exportiert nur das aktive Arbeitsblatt.

Tipp

Um mit Tools für den Datenimport die besten Ergebnisse zu erzielen, speichern Sie Tabellen, die nur die Spaltenüberschriften und die Datenzeilen enthalten. Wenn die gespeicherten Daten Seitentitel, Leerzeilen und Ähnliches enthalten, führt der spätere Import der Daten möglicherweise zu unerwarteten Ergebnissen.

Assistent zum Importieren von Flatfiles

Importen Sie in Textdateien gespeicherte Daten, indem Sie den Schritten des Assistenten zum Importieren von Flatfiles folgen.

Wie zuvor im Abschnitt Voraussetzungen beschrieben, müssen Sie Ihre Excel-Daten als Textdatei exportieren, bevor Sie den Assistenten zum Importieren von Flatfiles verwenden können, um sie zu importieren.

Weitere Informationen über den Assistenten zum Importieren von Flatfiles finden Sie unter Assistent zum Importieren von Flatfiles in SQL.

BULK INSERT-Befehl

BULK INSERT ist ein Transact-SQL-Befehl, den Sie in SQL Server Management Studio ausführen können. Das folgende Beispiel lädt die Daten aus der durch Trennzeichen getrennten Datei Data.csv in eine vorhandene Datenbanktabelle.

Wie zuvor im Abschnitt Voraussetzungen beschrieben, müssen Sie Ihre Excel-Daten als Textdatei exportieren, bevor Sie BULK INSERT verwenden können, um sie zu importieren. BULK INSERT kann Excel-Dateien nicht direkt lesen. Mit dem Befehl BULK INSERT können Sie eine CSV-Datei importieren, die lokal oder in Azure Blob Storage gespeichert ist.

USE ImportFromExcel;
GO
BULK INSERT Data_bi FROM 'C:\Temp\data.csv'
   WITH (
      FIELDTERMINATOR = ',',
      ROWTERMINATOR = '\n'
);
GO

Weitere Informationen und Beispiele für SQL Server und Azure SQL-Datenbank finden Sie in den folgenden Artikeln:

Das Massenkopieren-Tool (bcp)

Das bcp-Tool wird über die Eingabeaufforderung ausgeführt. Das folgende Beispiel lädt die Daten aus der durch Trennzeichen getrennten Datei Data.csv in die vorhandene Datenbanktabelle Data_bcp.

Wie zuvor im Abschnitt Voraussetzungen beschrieben, müssen Sie Ihre Excel-Daten als Textdatei exportieren, bevor Sie bcp verwenden können, um sie zu importieren. Das bcp-Tool kann Excel-Dateien nicht direkt lesen. Verwenden Sie es zum Importieren in SQL Server oder SQL-Datenbank aus einer Testdatei (CSV), die lokal gespeichert ist.

Wichtig

Verwenden Sie BULK INSERT oder OPENROWSET für eine Textdatei (CSV), die in Azure Blob Storage gespeichert ist. Als Beispiel siehe Importieren von Daten nach SQL Server mithilfe von BULK INSERT oder OPENROWSET(BULK...).

bcp.exe ImportFromExcel..Data_bcp in "C:\Temp\data.csv" -T -c -t ,

Weitere Informationen zur bcp finden Sie in den folgenden Artikeln:

Kopier-Assistent (ADF)

Importen Sie in Textdateien gespeicherte Daten, indem Sie den Schritten des Kopier-Assistenten von Azure Data Factory (ADF) folgen.

Wie zuvor im Abschnitt Voraussetzungen beschrieben, müssen Sie Ihre Excel-Daten als Textdatei exportieren, bevor Sie Azure Data Factory verwenden können, um sie zu importieren. Azure Data Factory kann Excel-Dateien nicht direkt lesen.

Weitere Informationen zum Kopier-Assistenten finden Sie in den folgenden Artikeln:

Azure Data Factory

Wenn Sie mit Azure Data Factory vertraut sind und den Kopier-Assistenten nicht ausführen möchten, erstellen Sie eine Pipeline mit einer Kopieraktivität, die Daten aus der Textdatei nach SQL Server oder Azure SQL-Datenbank kopiert.

Wie zuvor im Abschnitt Voraussetzungen beschrieben, müssen Sie Ihre Excel-Daten als Textdatei exportieren, bevor Sie Azure Data Factory verwenden können, um sie zu importieren. Azure Data Factory kann Excel-Dateien nicht direkt lesen.

Weitere Informationen zu diesen Data Factory-Quellen und -Senken finden Sie in folgenden Artikeln:

Informationen zum Kopieren von Daten mit Azure Data Factory finden Sie in folgenden Artikeln:

Häufige Fehler

Microsoft.ACE.OLEDB.12.0 wurde nicht registriert

Dieser Fehler tritt auf, weil der OLE DB-Anbieter nicht installiert ist. Installieren Sie ihn aus Microsoft Access Database Engine 2016 Redistributable. Achten Sie darauf, die 64-Bit-Version zu installieren, wenn Windows und SQL Server beides 64-Bit-Versionen sind.

Der vollständige Fehler besagt:

Msg 7403, Level 16, State 1, Line 3
The OLE DB provider "Microsoft.ACE.OLEDB.12.0" has not been registered.

Eine Instanz des OLE DB-Anbieters „Microsoft.ACE.OLEDB.12.0“ für den Verbindungsserver „(null)“ kann nicht erstellt werden

Dieser Fehler gibt an, dass Microsoft OLEDB nicht ordnungsgemäß konfiguriert wurde. Führen Sie zum Lösen dieses Problems den folgenden Transact-SQL-Code aus:

EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1;
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1;

Der vollständige Fehler besagt:

Msg 7302, Level 16, State 1, Line 3
Cannot create an instance of OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)".

Das In-Process-Laden des 32-Bit-OLE DB-Anbieters „Microsoft.ACE.OLEDB.12.0“ auf einem 64-Bit-SQL Server ist nicht möglich

Dieser Fehler tritt auf, wenn eine 32-Bit-Version des OLE DB-Anbieters mit einem 64-Bit-SQL Server installiert ist. Um dieses Problem zu beheben, deinstallieren Sie die 32-Bit-Version und installieren stattdessen die 64-Bit-Version des OLE DB-Anbieters.

Der vollständige Fehler besagt:

Msg 7438, Level 16, State 1, Line 3
The 32-bit OLE DB provider "Microsoft.ACE.OLEDB.12.0" cannot be loaded in-process on a 64-bit SQL Server.

Der OLE DB-Anbieter "Microsoft.ACE.OLEDB.12.0" für den Verbindungsserver "(null)" hat einen Fehler gemeldet

Dieser Fehler gibt normalerweise ein Berechtigungsproblem zwischen dem SQL Server-Prozess und der Datei an. Stellen Sie sicher, dass das Konto, das den SQL Server-Dienst ausführt, Vollzugriff auf die Datei besitzt. Es wird nicht empfohlen, Dateien vom Desktop zu importieren.

Der vollständige Fehler besagt:

Msg 7399, Level 16, State 1, Line 3
The OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" reported an error. The provider did not give any information about the error.

Das Datenquellenobjekt des OLE DB-Anbieters „Microsoft.ACE.OLEDB.12.0“ für den Verbindungsserver „(null)“ kann nicht initialisiert werden

Dieser Fehler gibt normalerweise ein Berechtigungsproblem zwischen dem SQL Server-Prozess und der Datei an. Stellen Sie sicher, dass das Konto, das den SQL Server-Dienst ausführt, Vollzugriff auf die Datei besitzt. Es wird nicht empfohlen, Dateien vom Desktop zu importieren.

Der vollständige Fehler besagt:

Msg 7303, Level 16, State 1, Line 3
Cannot initialize the data source object of OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)".