Announcement

Collapse
No announcement yet.

bulk insert mit bestimmten spalten aus Excel tabelle

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

  • bulk insert mit bestimmten spalten aus Excel tabelle

    Hi,
    ich habe 2 Probleme.

    1.:
    ich habe eine Tabelle mit einem Int PK und einem String. und dann eine Excel Tabelle in der pro Zeile ein String steht (nur die erste Spalte ist mit Daten gefüllt) den ich mit nem bulk insert Befehl einlesen wollte.
    Allerdings soll auch automatisch ein PK angelegt werden. ich hatte da was mit auto_increment bzw. IDENTITY(1,1) gefunden aber das hat mich irgendwie nicht so wirklich ans Ziel gebracht. Muss ich jetzt die Excel Datei per Hand verändern und noch eine Spalte hinzufügen für den Int PK? Weil es wäre mir lieber wenn ich die Excel Dateien nicht noch extra verändern müsste.

    2.:
    Eine Tabelle mit einem String PK und mehreren int Attributen soll auch mit Daten aus einer Excel Tabelle gefüllt werden.

    Hier ist das Problem das die erste Zeile ignoriert werden soll weil das Überschriften sind die nicht in die Tabelle eingelesen werden sollen. Und die Reihenfolge der Daten in der Excel Tabelle stimmt nicht mit der Reihenfolge der SQL Tabelle überein und es gibt komplette Spalten die ignoriert werden sollen.

    uuund der String PK soll von einer Spalte eingelesen werden wo allerdings hinter dem String noch ein ".txt" steht welches abgeschnitten werden soll.



    gibt es für diese Probleme irgendwelche bulk insert optionen, ist das überhaupt so möglich wie ich mir das vorstelle oder muss ich die Excel Dateien per Hand anpassen und dann einlesen?

    schonmal vielen Dank für eure Tipps

    Gruß Chaoso

    //edit: kann es sein das ich dafür so ein formatfile brauche? hiiiilfe :P
    Zuletzt editiert von Chaoso; 10.11.2011, 18:05. Reason: Ergänzung

  • #2
    Ganz genau, dein Edit sagt es richtig - einen Formatfile verwenden, anders schaffst du diese Dinge nicht.

    bye,
    Helmut

    Comment


    • #3
      wie erstelle ich den denn am besten? kann man das irgendwie generieren und dann anpassen?
      sry das ich so blöd frage aber das mit dem Formatfile ist total neu für mich. das ist ne xml datei die man dann irgendwie anpassen muss?

      //edit:

      Den Bulk insert hab ich jetzt hin bekommen mit einer Nicht-XML-Formatdateien.

      Allerdings habe ich jetzt noch das Problem, dass er mir statt 40 Datensätzen nur 39 in die Tabelle speichert. Ich hab den Bulk insert mit der Option Firstrow = 2 aufgeführt da in der Quelldatei die erste Zeile nur Überschriften sind aber aus irgend einem Grund überspringt er die ersten beiden Zeilen und wenn ich Firstrow = 1 eingeben kommt ein Fehler aber er läd trotzdem 39 Datensätze.
      Msg 4864, Level 16, State 1, Line 1 Datenkonvertierungsfehler beim Massenladen (typenkonflikt oder ungültiges Zeichen für die angegebene Codepage) für 1-Zeile, 1-Spalte (T_1).
      ich seh da aber nirgends einen Typenkonflikt die erste Zeile ist genau so von den Daten her wie die 2.

      Ich hoffe ihr könnt mir weiterhelfen.

      Gruß
      Chaoso
      Zuletzt editiert von Chaoso; 14.11.2011, 14:31.

      Comment


      • #4
        Das Problem ist wohl das ich im Spaltenheader der Quelldatei nicht die selben FIELDTERMINATOR und ROWTERMINATOR benutze wie in den Daten-Zeilen ab Zeile 2.

        Habt ihr ne Idee wie ich das hin bekommen könnte ohne die Quelldatei zu verändern?

        Comment


        • #5
          Das wird schwierig, denn in der Beschreibung zu bulk insert steht bei FIRSTROW extra der Hinweis, dass das nicht zum Überspringen eines Headers verwendet werden kann. Man könnte jetzt mal sagen, wir lassen das als einen Fehler beim Import zu, der ja standardmäßig bis zu 10 Fehler toleriert, bevor er abbricht. Allerdings hast du ein Problem, wenn der Rowterminator wirklich unterschiedlich ist und deswegen Spalten aus der zweiten Zeile noch zur ersten hinzugerechnet werden. Das würde auch erklären, warum die erste Zeile fehlt und statt 40 nur 39 Zeilen da sind. Was man da ohne händischen Eingriff machen kann weiß ich jetzt aber leider auch nicht.

          bye,
          Helmut

          Comment


          • #6
            habe ich mir auch schon gedacht.

            Ich hab halt jetzt um z.B. .txt weg zu bekommen bei dieser spalte so ein Abschlusszeichen: ".txt;" deswegen habe ich in der ersten spalte andere Terminatoren.

            Ich fand das die einfachste Lösung bevor ich da irgendwie mit Schleifen und SUBSTR() arbeite das war mir zu kompliziert und ich habs auch nicht hin bekommen

            Naja Danke aber für deine Mühe

            Comment

            Working...
            X