SQL & Datenbankprogrammierung
Von: iLLo, 17.4.2012 16:55 Uhr
Hallo zusammen,

ich möchte gerne eine Textdatei in den SQL Server importieren. Dafür habe eine Tabelle mit NVARCHAR, INT und FLOAT Feldern angelegt.
Außerdem habe ich eine XML Datei in welcher die einzelnen Spalten definiert sind.
Über einen Bulk Insert lade ich die Daten dann entsprechend in die Tabelle.

SELECT FIELD1,FIELD2,FIELD3,FIELD4,FIELD5 FROM
openrowset (bulk 'W:\DATA.TXT',
FORMATFILE='W:\XML\DATA.TXT.XML', MAXERRORS=10000000,
CODEPAGE='1250') as test

Wenn die Datei eine UTF-8 Datei ist, kann ich diese Datei dann durch die Angabe der Codepage importieren?
Welche Codepage müsste ich denn dafür nehmen?
Habe etwas von 65001 gelesen aber diese funktioniert irgendwie gar nicht.

Mein Problem ist, dass ich oft entweder Textdateien im DOS Format oder U-8 DOS Format geliefert bekomme. Diese müsste ich dann erst manuell oder durch eine weitere Software konvertieren wodurch ich unter unter Umständen die Unicode-Fähigkeit verliere.

Mal sehen ob mir hier geholfen werden kann :-)

Gruß Olli



  1. Antwort von df6gl 0
    Re: MSSQL Server 2008 UTF-8 BULK INSERT
    Hallo,




    ich möchte gerne eine Textdatei in den SQL Server importieren.
    Dafür habe eine Tabelle mit NVARCHAR, INT und FLOAT Feldern
    angelegt.
    Außerdem habe ich eine XML Datei in welcher die einzelnen
    Spalten definiert sind.
    Über einen Bulk Insert lade ich die Daten dann entsprechend in
    die Tabelle.

    SELECT FIELD1,FIELD2,FIELD3,FIELD4,FIELD5 FROM
    openrowset (bulk 'W:\DATA.TXT',
    FORMATFILE='W:\XML\DATA.TXT.XML', MAXERRORS=10000000,
    CODEPAGE='1250') as test

    Wenn die Datei eine UTF-8 Datei ist, kann ich diese Datei dann
    durch die Angabe der Codepage importieren?
    Welche Codepage müsste ich denn dafür nehmen?
    Habe etwas von 65001 gelesen aber diese funktioniert irgendwie
    gar nicht.

    Mein Problem ist, dass ich oft entweder Textdateien im DOS
    Format oder U-8 DOS Format geliefert bekomme. Diese müsste ich
    dann erst manuell oder durch eine weitere Software
    konvertieren wodurch ich unter unter Umständen die
    Unicode-Fähigkeit verliere.

    Mal sehen ob mir hier geholfen werden kann :-)
    Hier:
    http://msdn.microsoft.com/de-de/library/ms188365.aspx

    schließt MS die Verwendung von UTF-8 beim Bulk Insert definitiv aus...


    Gruß
    Franz, DF6GL
    • Antwort von Ulrich Meier 0
      Re: MSSQL Server 2008 UTF-8 BULK INSERT
      Hallo Olli,

      ich bin mir nicht sicher, ob ich dir weiterhelfen kann, da ich "meine" Bulk-Inserts noch immer über eine Text - Formatdatei steuere.
      Als Codepage gebe ich immer CODEPAGE = '1252' an
      aber abhängig davon, ob es sich um Unicode handelt, verwende ich eine andere Formatdatei mit den folgenden Änderungen:

      Folgende Anpassungen müssen in den Formatdateien zum Einlesen von Daten in UNICODE vorgenommen werden:

      SQLCHAR => SQLNCHAR
      ";" => ";\0"
      "\r\n" => "\r\0\n\0"

      und

      alle Feldlängen der nvarchar – Felder müssen verdoppelt werden !


      vielleicht hilt dir das ja weiter.

      mit freundlichem Gruß
      Ulrich Meier
      • Antwort von André Frenster 0
        Re: MSSQL Server 2008 UTF-8 BULK INSERT
        Hallo,

        bin auf diesem Gebiet auch nicht ganz so fit. Ich habe aber mal beim XML-Import folgende Codepage genutzt:

        <?xml version="1.0" encoding="ISO-8859-1"?>

        Gruß André
        • Antwort von Marcus 0
          Re: MSSQL Server 2008 UTF-8 BULK INSERT
          Hallo olli,
          habe in der Richtung noch nie etwas gemacht (da ich Programmierer bin schreibe ich mir bei Bedarf etwas selbst ;), das ist in ein paar Minuten erledigt). Habe aber auf der Seite http://msdn.microsoft.com/de-de/library/ms188365.aspx kurz nachgelesen und einige interessante Infos gefunden. Z.B. dass Pagecode 65001 vom SQL-Server offenbar nicht unterstützt wird. Ansonsten würde ich das "übliche" Spiel machen: try and Error - sprich austesten und die Fehlermeldungen bzw. das Ergebnis analysieren. Vermutlich wird es sowieso schwierig wenn du unterschiedliche Formate erhältst.

          Gruß
          Marcus
          • Antwort von skywalker 0