none
Bulk Insert macht mich Wahnsinnig... RRS feed

  • Frage

  • Hallo zusammen,

    ich muss täglich 25 Dateien in eine SQL 2012 Express DB einlesen.
    Seit 3 Tagen verzweifliche ich an diversen Schema.ini & Format.fmt Anleitungen.

    Das Problem ist, das in manchen feldern "Doublequotes" enthalten sind und in anderen nicht...
    Die Doublequotes sind auch nur dort gesetzt, wenn im Text ein Komma enthalten ist, logisch sonst würde ja am Komma getrennt.

    Beispiel:
    Spalte1,Spalte2,Spalte3,Spalte4,Spalte5
    Text,Text,Text,Text,Text
    Text,"text,mit,Kommas",Text,Text,Text
    Text,Text,"text,mit,Kommas",Text,Text
    Text,Text,Text,"text,mit,Kommas",Text

    Wenn ich die FMT Anleitung richtig interpretiere, müsste meine FMT  wie folgt aussehen:
    10.0
    5
    1 SQLCHAR 0 255 ",\"" 1 Spalte1 Latin1_General_CI_AS
    2 SQLCHAR 0 255 "\",\" 2 Spalte2 Latin1_General_CI_AS
    3 SQLCHAR 0 255 "\",\" 3 Spalte3 Latin1_General_CI_AS
    4 SQLCHAR 0 255 "\",\" 4 Spalte4 Latin1_General_CI_AS
    5 SQLCHAR 0 255 "\",\r\n" 5 Spalte5 Latin1_General_CI_AS

    Mein SQL Befehl sieht wie folgt aus:
    BULK INSERT dbo.tabelle FROM 'Datendatei.csv'
    with
    (
    FIRSTROW = 2,
    FORMATFILE='Formatdatei.fmt'
    )

    Ich würde mich freuen wenn mir hierbei jemand behilflich sein könnte.

    Danke & vG
    Dietmar


    • Bearbeitet ExXoN0282 Samstag, 12. September 2015 00:00
    Freitag, 11. September 2015 23:56

Antworten

  • Hallo Dietmar,

    wenn überhaupt dürfte es am SSMS liegen und das Speichern des Import Assistenten sollte bei der Vollversion am Ende möglich sein -  notfalls dafür eine Vollversion / Developer nehmen. dtsexec wiederum ist bei Express mit Advanced Services dabei.

    Nur mit dem SQL Server Agenten wird es nichts, aber man kann solche Pakete auch über den Windows Aufgaben Dienst ausführen: Erstelle eine Batchdatei mit den dtsexec-Aufrufen.

    Gruß Elmar

    Samstag, 12. September 2015 18:50
    Beantworter

Alle Antworten

  • Hi,
    die Formatanweisungen sollten für jede Spalte in einer Zeile stehen. Ob die wechselnden Darstellungen der Zeichenketten (mit und ohne Gänsefüßchen) ein Problem sein wird, kann ich jetzt nicht prüfen. Falsch ist jedoch in Deiner Formatdatei das abschließende \" in den Spalten 2, 3 und 4.

    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks



    Samstag, 12. September 2015 04:52
  • Hallo Dietmar,

    mit BULK INSERT / bcp wirst Du das nicht hinbekommen. Denn dort gilt bei den Trennzeichen entweder immer oder gar nicht. Eine SCHEMA.INI kennt es genauso wenig; das ist eine Spezialität des Access Text Treibers.

    Das einfachste / sicherste wäre ein SSIS Paket zu erstellen. Gibst Du für eine Flatfile-Datenquelle als Trenner das Komma und als Text-Qualifizierer doppelte Anführungsstriche an so funktioniert das auch, wenn letztere optional sind.

    Für das automatisierte Importieren kannst Du dtsexec verwenden - z. B. in Verbindung mit dem SQL Server Agenten.

    Gruß Elmar


    Samstag, 12. September 2015 06:46
    Beantworter
  • Guten Morgen Peter,

    Danke für die schnelle Antwort!

    Die Zeilenumbrücke der FMT kommen nur hier im Forum vor, steht natürlich pro Spalte alles in einer Zeile ;)

    Wenn das was Elmar schreib zutrifft, dann kann ich das mit dem Bulk Import ohnehin abhaken und muss das mit dem SSIS Paket versuchen.

    Danke & vG

    Dietmar

    Samstag, 12. September 2015 07:11
  • Guten Morgen Elmar,

    Danke für die schnelle Antwort! Werde ich heute Abend gleich mal ausprobieren...

    Sofern das alles auch unter SQL 2012 Express funktioniert, denn hier gibt es ja die ein oder andere Einschränkung.

    Danke & vG Dietmar


    Samstag, 12. September 2015 07:14
  • Soooo,

    wie schon vermutet... SQL Exporess kann zwar SSIS Pakete erstellen, aber diese nicht speichern...

    Was mir eine regelmäßgie automatisierte Ausführung quasi unmöglich macht.

    Gibt es ggf. noch weitere Lösungsansätze?

    Danke & vG

    Dietmar

    Samstag, 12. September 2015 17:47
  • Hallo Dietmar,

    wenn überhaupt dürfte es am SSMS liegen und das Speichern des Import Assistenten sollte bei der Vollversion am Ende möglich sein -  notfalls dafür eine Vollversion / Developer nehmen. dtsexec wiederum ist bei Express mit Advanced Services dabei.

    Nur mit dem SQL Server Agenten wird es nichts, aber man kann solche Pakete auch über den Windows Aufgaben Dienst ausführen: Erstelle eine Batchdatei mit den dtsexec-Aufrufen.

    Gruß Elmar

    Samstag, 12. September 2015 18:50
    Beantworter