Fokus: Import aus Sicht des SQL Servers – nicht aus Excel

Wir reden hier nicht über „Datei öffnen und per Copy/Paste reinziehen“.
Wir reden über stabile, wiederholbare Imports von Excel-Dateien in SQL Server.
Automatisierbar, kontrollierbar, mit Fehlerprotokoll.
Und möglichst ohne viel händische Nacharbeit.

Variante 1: OPENROWSET – direkt im SQL Server

Funktioniert gut, wenn auf dem Server die richtigen Treiber installiert sind (ACE/Jet).

Beispiel:

SELECT *  
INTO dbo.ExcelImportTemp  
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',  
    'Excel 12.0 Xml;HDR=YES;Database=C:\Import\kunden.xlsx',  
    'SELECT * FROM [Tabelle1$]');

Voraussetzungen:

  • Ad Hoc Distributed Queries aktiviert
  • ACE-OLEDB-Provider installiert
  • Datei muss auf dem SQL Server erreichbar sein (Pfad aus Server-Sicht)

Vorteil:

  • Einfach und schnell für einmalige oder manuelle Importe

Nachteil:

  • Kein Logging
  • Keine Wiederverwendung
  • Fragil bei Änderungen in der Excel-Struktur

Variante 2: SSIS – SQL Server Integration Services

Die solide Variante für Profis.
Kommt mit Visual Studio und SQL Data Tools.

Vorteile:

  • Validierung, Transformation, Mapping
  • Logging und Fehlerweiterleitung
  • Kann Daten direkt in Staging-Tabellen einlesen
  • Zeitgesteuerte Verarbeitung über SQL Agent

Typisches Setup:

  • Excel-Source
  • Data Conversion
  • Conditional Split (für Fehler)
  • Ziel: Staging- oder Zieltabelle

Nachteil:

  • Komplex in der Einrichtung
  • Deployment auf Produktivsystem braucht Rechte und Pflege

Variante 3: BULK INSERT mit vorheriger Umwandlung in CSV

Wenn Du keine Lust auf Excel-Treiber hast.
Dann wandelst Du die Datei in .csv und nimmst BULK INSERT.

Beispiel:

BULK INSERT dbo.Kunden
FROM 'C:\Import\kunden.csv'
WITH (
    FIRSTROW = 2,
    FIELDTERMINATOR = ';',
    ROWTERMINATOR = '\n',
    CODEPAGE = '65001',
    TABLOCK
);

Vorteil:

  • Schnell
  • Gut skriptbar
  • Keine Excel-abhängige DLLs nötig

Nachteil:

  • Kein Spaltenmapping
  • Kein Header-Check
  • Keine Transformationen möglich

Variante 4: T-SQL + VBA + Zugriff über Access oder ADO

Wenn Du den Import aus Access heraus steuerst, aber in SQL importierst – geht auch.

Public Sub ExcelNachSQL()
    Dim conn As Object
    Set conn = CreateObject("ADODB.Connection")

    conn.Open "Provider=SQLOLEDB;Data Source=DEINSERVER;Initial Catalog=DEINDB;Integrated Security=SSPI"

    conn.Execute "EXEC dbo.sp_ImportiereExcel 'C:\Import\kunden.xlsx'"

    conn.Close
End Sub

Voraussetzung: Du baust Dir ein Stored Procedure, das per OPENROWSET oder SSIS-Paket importiert.

Vorteil:

  • Trennung von Oberfläche (Access) und Logik (SQL Server)
  • Automatisierbar aus Formular, Button oder Batch

Empfehlung: Immer in eine Staging-Tabelle laden

Warum?Erklärung
TrennungRohdaten ≠ Zieldaten
FehlerprotokollDu kannst ungültige Zeilen rausfiltern
WiederholbarkeitGleicher Prozess, andere Datei
RückverfolgbarkeitWer, wann, was
INSERT INTO dbo.Kunden
SELECT * FROM dbo.ExcelImportTemp
WHERE Email IS NOT NULL AND Kundennummer IS NOT NULL

Fehlerhandling: Ein Muss

Beispiel: Fehler zählen

SELECT COUNT(*) AS FehlerhafteZeilen
FROM dbo.ExcelImportTemp
WHERE ISNUMERIC(Kundennummer) = 0 OR Email NOT LIKE '%@%'

Logging-Tabelle:

ZeitstempelDateiFehlerBenutzer
2024-05-08 08:34:01kunden.xlsx12MAXMUSTERMANN

Excel-Importe sind nie ganz sauber.

Aber Du kannst sie mit den richtigen SQL-Werkzeugen stabilisieren.
Kein Copy-Paste. Kein Adhoc-Gefrickel.

Wenn Du willst, bau ich Dir den Prozess:
stabil, nachvollziehbar, wiederverwendbar – und mit Button in Access, wenn’s sein muss.

Tags:

No responses yet

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert