none
bcp Massendatenimport mit Formatdatei Problem mit Datumsformat RRS feed

  • Frage

  • Ich muss regelmäßig Massendaten aus einem Fremdsystem die ich per .txt Datei bekomme in eine Tabelle des SQLServers 2005 importieren. Alles klappt soweit sehr gut bis auf den Import des Datumfeldes. So sieht das Feld aus: 19.7.2009 00:00:00 (durch ; getrennte Felder). Der SQLServer erwartet ja dieses Format: 2009-7-19 00:00:00 . Kann mir bitte jemand sagen, ob es mittels bcp mit Formatdatei möglich ist beim Import das Format zu korrigieren, so dass es eingelesen werden kann und wenn ja, wie es funktioniert. Oder kennt jemand einen anderen besseren Weg.

    Danke und Gruß, Franz

    Dienstag, 4. August 2009 10:48

Antworten

  • Hallo Franz,

    BCP interpretiert seit SQL Server 7 Datumsspalten im ODBC Format:
    http://msdn.microsoft.com/de-de/library/ms191212.aspx

    Und allgemein eine empfehlenswerte Lektüre zu Datum/Zeit:
    Der ultimative Guide für die Datetime Datentypen

    Wenn das Eingabeformat nicht passt, sollte man eine Importtabelle dazwischenschalten,
    in der man für solche Felder eine ausreichend dimensionierte Zeichenspalte (VARCHAR) verwendet.
    Und erst anschliessend die Daten via CAST/CONVERT in die Zieltabelle zu übertragen.

    Das Vorgehen empfiehlt sich - unabhängig vom speziellen Formaten - immer bei
    Fremddaten, da man selten davon ausgehen kann, dass dort alles passt.

    Eine Alternative wären die Integration Services, wo man mehr Einfluß auf die Konvertierung
    nehmen kann, die gibt es allerdings nicht bei SQL Server Express, sondern nur bei Vollversionen.

    Gruß Elmar
    Dienstag, 4. August 2009 16:30
  • Hallo Franz,

    BCP war und ist niemals als allgemeines Tool zum Importieren von Textdateien gedacht,
    auch wenn es häufig dafür genutzt wird.
    Das Zeichenformat ist ein Format aus frühen Zeiten, wo es noch wenig andere Programme gab
    (und man auch mal Großrechner Dateien anhand von Ausdrucken importieren musste ;-).

    Auch wenn es ähnlich einem CSV/Textformat ist, von denen es zu dem unterschiedlichen Variationen gibt,
    ist es damit nicht identisch. Und letztendlich muß sich das Eingabeformat an bcp ausrichten.

    Gruß Elmar
    Mittwoch, 5. August 2009 17:12

Alle Antworten

  • Hallo Franz,

    BCP interpretiert seit SQL Server 7 Datumsspalten im ODBC Format:
    http://msdn.microsoft.com/de-de/library/ms191212.aspx

    Und allgemein eine empfehlenswerte Lektüre zu Datum/Zeit:
    Der ultimative Guide für die Datetime Datentypen

    Wenn das Eingabeformat nicht passt, sollte man eine Importtabelle dazwischenschalten,
    in der man für solche Felder eine ausreichend dimensionierte Zeichenspalte (VARCHAR) verwendet.
    Und erst anschliessend die Daten via CAST/CONVERT in die Zieltabelle zu übertragen.

    Das Vorgehen empfiehlt sich - unabhängig vom speziellen Formaten - immer bei
    Fremddaten, da man selten davon ausgehen kann, dass dort alles passt.

    Eine Alternative wären die Integration Services, wo man mehr Einfluß auf die Konvertierung
    nehmen kann, die gibt es allerdings nicht bei SQL Server Express, sondern nur bei Vollversionen.

    Gruß Elmar
    Dienstag, 4. August 2009 16:30
  • Hallo Elmar,
    danke für deine Links, insbesondere der Guide ist sehr gut. Der Weg über die temp Tabelle ist mir bekannt, ich wollte aber einfach auch wissen, ob es denn direkt beim Import die Möglichkeit der Änderung gibt, leider wohl nicht. Danke!
    Mittwoch, 5. August 2009 14:44
  • Hallo Franz,

    BCP war und ist niemals als allgemeines Tool zum Importieren von Textdateien gedacht,
    auch wenn es häufig dafür genutzt wird.
    Das Zeichenformat ist ein Format aus frühen Zeiten, wo es noch wenig andere Programme gab
    (und man auch mal Großrechner Dateien anhand von Ausdrucken importieren musste ;-).

    Auch wenn es ähnlich einem CSV/Textformat ist, von denen es zu dem unterschiedlichen Variationen gibt,
    ist es damit nicht identisch. Und letztendlich muß sich das Eingabeformat an bcp ausrichten.

    Gruß Elmar
    Mittwoch, 5. August 2009 17:12