Announcement

Collapse
No announcement yet.

Bulk insert - Datentypenproblematik?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Bulk insert - Datentypenproblematik?

    Hallo,

    folgendes Scenario:

    Import von Datensätze > 1 Mio. in eine eigenen Tabelle auf dem Server.

    Die Datensätze liegen als CSV Datei vor und sehen folgendermaßen aus...

    Code:
    "
    Ort;;17;18;4;1;10;1;9;Garage, Garten, Dachgeschoss;203;519;269.000,00;269.000,00;1960;bla, blA, bla, bla;2008-02-27 00:00:00;2008-06-24 00:00:00;1;;Anschrift;0;0;0;0;0;0,00;7,0093696;51,552019;http://www.internetadresse.de;05562014;
    Ort2;;17;18;4;1;10;1;9;Garage, Garten, Dachgeschoss;203;519;269.000,00;269.000,00;1960;bla, bla, bla, bla;2008-02-27 00:00:00;2008-06-24 00:00:00;1;45444;Anschrift;0;0;0;0;0;0,00;7,0093696;51,552019;;05562014;
    Die Tabelle zum Importieren ist bereits erstellt, leer und wartet auf die Daten.

    Realisiert werden soll der Import mit folgender Prozedur:

    Code:
    BEGIN
    set nocount on
    bulk insert tbl_imp_Data
    FROM 
    '\\Servername\sql-import\tbl_short.csv'
    	with
    	(
    	datafiletype = 'char',
    	Firstrow = 1,
    	Fieldterminator = ';',
    	Rowterminator = '\n'
    	)
    END
    und als Resultat erhalte ich folgende Fehlermeldungen...

    Code:
    Meldung 4864, Ebene 16, Status 1, Prozedur LoadTxtFile, Zeile 10
    Datenkonvertierungsfehler beim Massenladen (Nichtübereinstimmung beim Typ oder ungültiges Zeichen für die angegebene Codepage) für 1-Zeile, 3-Spalte (AnzahlWochen).
    Meldung 4864, Ebene 16, Status 1, Prozedur LoadTxtFile, Zeile 10
    Datenkonvertierungsfehler beim Massenladen (Nichtübereinstimmung beim Typ oder ungültiges Zeichen für die angegebene Codepage) für 2-Zeile, 13-Spalte (ErsterPreis).
    Meldung 4864, Ebene 16, Status 1, Prozedur LoadTxtFile, Zeile 10
    Datenkonvertierungsfehler beim Massenladen (Nichtübereinstimmung beim Typ oder ungültiges Zeichen für die angegebene Codepage) für 3-Zeile, 13-Spalte (ErsterPreis).
    Meldung 4864, Ebene 16, Status 1, Prozedur LoadTxtFile, Zeile 10
    Datenkonvertierungsfehler beim Massenladen (Nichtübereinstimmung beim Typ oder ungültiges Zeichen für die angegebene Codepage) für 4-Zeile, 13-Spalte (ErsterPreis).
    Meldung 4864, Ebene 16, Status 1, Prozedur LoadTxtFile, Zeile 10
    Datenkonvertierungsfehler beim Massenladen (Nichtübereinstimmung beim Typ oder ungültiges Zeichen für die angegebene Codepage) für 5-Zeile, 13-Spalte (ErsterPreis).
    Meldung 4864, Ebene 16, Status 1, Prozedur LoadTxtFile, Zeile 10
    Datenkonvertierungsfehler beim Massenladen (Nichtübereinstimmung beim Typ oder ungültiges Zeichen für die angegebene Codepage) für 6-Zeile, 13-Spalte (ErsterPreis).
    Meldung 4864, Ebene 16, Status 1, Prozedur LoadTxtFile, Zeile 10
    Datenkonvertierungsfehler beim Massenladen (Nichtübereinstimmung beim Typ oder ungültiges Zeichen für die angegebene Codepage) für 7-Zeile, 13-Spalte (ErsterPreis).
    Meldung 4864, Ebene 16, Status 1, Prozedur LoadTxtFile, Zeile 10
    Datenkonvertierungsfehler beim Massenladen (Nichtübereinstimmung beim Typ oder ungültiges Zeichen für die angegebene Codepage) für 8-Zeile, 13-Spalte (ErsterPreis).
    Meldung 4864, Ebene 16, Status 1, Prozedur LoadTxtFile, Zeile 10
    Datenkonvertierungsfehler beim Massenladen (Nichtübereinstimmung beim Typ oder ungültiges Zeichen für die angegebene Codepage) für 9-Zeile, 28-Spalte (Longitude).
    Meldung 4864, Ebene 16, Status 1, Prozedur LoadTxtFile, Zeile 10
    Datenkonvertierungsfehler beim Massenladen (Nichtübereinstimmung beim Typ oder ungültiges Zeichen für die angegebene Codepage) für 10-Zeile, 28-Spalte (Longitude).
    Meldung 4864, Ebene 16, Status 1, Prozedur LoadTxtFile, Zeile 10
    Datenkonvertierungsfehler beim Massenladen (Nichtübereinstimmung beim Typ oder ungültiges Zeichen für die angegebene Codepage) für 11-Zeile, 13-Spalte (ErsterPreis).
    Meldung 4865, Ebene 16, Status 1, Prozedur LoadTxtFile, Zeile 10
    Das Massenladen ist nicht möglich, da die maximale Fehleranzahl (10) überschritten wurde.
    Meldung 7399, Ebene 16, Status 1, Prozedur LoadTxtFile, Zeile 10
    Der OLE DB-Anbieter "BULK" für den Verbindungsserver "(null)" hat einen Fehler gemeldet. Der Anbieter hat keine Informationen zu dem Fehler bereitgestellt.
    Meldung 7330, Ebene 16, Status 2, Prozedur LoadTxtFile, Zeile 10
    Eine Zeile kann nicht vom OLE DB-Anbieter "BULK" für den Verbindungsserver "(null)" abgerufen werden.
    Meine Frage ist jetzt, wie ich vorgehen muss, damit es letzendlich funktioniert? Die ersten Fehler treten auch in Spalten (Spalte 3 - Wert zum Einfügen ist 17) vom Typ (int) auf, wo ich mir kaum ein Datenkonvertierungsproblem vorstellen kann. Dahe denke ich, dass es auch ein andere Fehler sein kann.

    Vielen Dank für Eure Hilfe..

    Martin

  • #2
    Hallo Martin,

    das BULK INSERT kommt mit Deinen Zahlen im DE Format nicht zurecht.
    Im Standard wir das EN Format erwartet, also mit dem Punkt als Dezimaltrenner; Du hast z.B.:
    269.000,00

    Da würde also bestenfalls ein 269,00 bei rauskommen, wenn es überhaupt akzeptiert wurde.
    Du müsstes also entweder Deine Qulldaten umformatieren oder es als String importieren und dann konvertieren oder mit der "FormatFile" Option vom BULK experimentieren.
    Olaf Helper

    <Blog> <Xing>
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich

    Comment


    • #3
      Danke für die Antwort...

      Dein Hinweis stimmt. Entferne ich die Tausender Formatierungen und formatiere die Kommazahlen im englischen Format (Kommastelle = Punkt) klappt der Import.

      Wichtig auch, die Codepage auf 'ACP' zu setzen, sonst kommen nur zerstörte Umlaute an.

      Unter meinen 2,4 Mio Datensätze erhalte ich dann immer noch bei 50 einen Fehler, den ich so nicht nachvollziehen kann - das ist aber zu verschmerzen. Es sind 'nur' historische Analysedaten.

      Der Import in eine leere Tabelle dauert dann ca. 19 Minuten.

      Kann jemand etwas dazu sagen? Wegen der unterschiedlichen Konfigurationen gibt es wohl kaum Vergleichswerte, oder? Ich finde 19 Minuten immer noch recht viel... ?

      Vielen Dank

      Martin

      Comment


      • #4
        Ich kenne ja deine Hardware nicht, aber wenn es über 1 Mio. Datensätze sind und die in etwa 19 Minuten importiert sind, sind das über 800 Datensätze pro Sekunde, finde ich eigentlich schon ganz gut.

        bye,
        Helmut

        Comment

        Working...
        X