Announcement

Collapse
No announcement yet.

import/update aus csv geht nicht

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

  • import/update aus csv geht nicht

    Hallo zusammen,
    ich hab jetzt schon tagelang gegoogelt, gesucht, probiert und trotzdem klappts nicht. Folgendes Problem. Ziel ist es, in eine bestehende MS SQL 2005 Datenbank (1 Tabelle, ca. 3 Mill. Datensätze, 8 Spalten) täglich ca. 50 Datensätze upzudaten aus einem csv-File. Am Besten per script.
    Von den 3 Mill. Datensätzen in der DB sind ca. 100.000 vollständig gefüllt, die restlichen beinhalten nur das Feld "Login" (alle anderen Felder sind NULL). Das csv-File soll nun die bestehenden Datensätze updaten - entweder die geänderten Informationen bei den vorhandenen vollständigen Recordsets oder die fehlenden(neuen) Informationen bei den Recordsets, wo bislang nur die "Login"-Spalte existiert.
    Der reine select-Zugriff auf das csv-file funktioniert soweit, nur updates finden nicht statt, da kommt eine Fehlermeldung(siehe unten).
    csv und table haben identische Spaltenbezeichnungen, soweit sollte also alles passen.
    Hier das update-query:
    Code:
    USE db_user
    UPDATE dbo.tb_user SET userno=source.userno,name=source.name,status=source.status
    FROM
    OPENROWSET('Microsoft.Jet.OLEDB.4.0',
    'Text;Database=C:\TNU\import;',
    'SELECT * FROM [tbuser.csv]') as source,tb_user L
    where L.LOGIN=source.LOGIN
    Fehlermeldung beim Ausführen:
    Meldung 207, Ebene 16, Status 1, Zeile 7
    Ungültiger Spaltenname 'LOGIN'.

    Der Fehler wird durch das LOGIN bei source.LOGIN versursacht, irgendwie kann ich die Spalten in der csv nicht "ansprechen". Weiß irgendjemand vielleicht Abhilfe? Bin für jeden konstruktiven Vorschlag dankbar!

  • #2
    Hallo communi,

    habe es bei mir ausprobiert und grundsätzlich funktioniert das so.

    Was liefert Dir
    [highlight=SQL]SELECT Source.*, L.*
    FROM
    OPENROWSET('Microsoft.Jet.OLEDB.4.0',
    'Text;Database=C:\TNU\import;',
    'SELECT * FROM [tbuser.csv]') as source,tb_user L
    where L.LOGIN=source.LOGIN[/highlight]

    Dir für ein Ergebnis und insb. Spaltennamen?

    Übrigens: LOGIN ist ein reserviertes Wort, solltest Du besser immer in eckige Klammern setzen.
    => L.[Login] = source.[Login]
    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
      Hallo Olaf,
      danke für die Antwort. Ich hab jetzt alles auf LOGINNAME umgestellt, damit es da nicht zu Kollisionen kommt.
      Das Ergebnis deiner Abfrage ist das gleiche wie mein Updatecode:
      Meldung 207, Ebene 16, Status 1, Zeile 7
      Ungültiger Spaltenname 'LOGINNAME'.

      Irgendwie kommt er mit den Spaltenbezeichnungen nicht klar :-(

      Viele Grüße,

      communi

      Comment


      • #4
        Problem umgangen, ich nehm eine temptable als zwischenschritt, dann funktioniert alles. :-)

        Comment

        Working...
        X