Announcement

Collapse
No announcement yet.

BULK INSERT fix. Satzläng u. FormatFile

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

  • BULK INSERT fix. Satzläng u. FormatFile

    Hall zusammen

    Ich habe Probleme mit Bulk-Insert. Ich bekomme aus einer externen Software eine Datei die wie folgt aussieht:

    Code:
    ATZP7747                          Klaus               AGUSTIN                                 MKü  
    ATZB2546661                       Michael             Aigner                                  MS107
    ATZB2346731                       Friederike          Meier                                   W609 
    ATZB2375681                       Stefan              Altrichter                              M304 
    ATZB2515971                       Edeltraud           Anderle                                 W210
    Dazu habe ich eine Tabelle die so, bzw sehr ähnlich aussieht:
    [highlight=sql]
    CREATE TABLE [dbo].[CSVTest](
    [ID] [int] NULL,
    [FirstName] [varchar](40) NULL,
    [LastName] [varchar](40) NULL,
    [BirthDate] [smalldatetime] NULL,
    [Sex] [nvarchar](1) NULL,
    [PersonalNr] [nvarchar](15) NULL
    ) ON [PRIMARY]
    [/highlight]

    dazu wiederrum habe ich ein Formatfile erstellen lassen (mit bcp format):
    [highlight=xml]
    <?xml version="1.0"?>
    <BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <RECORD>
    <FIELD ID="1" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="40" COLLATION="Latin1_General_CI_AS"/>
    <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="40" COLLATION="Latin1_General_CI_AS"/>
    <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="1" COLLATION="Latin1_General_CI_AS"/>
    <FIELD ID="4" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="30" COLLATION="Latin1_General_CI_AS"/>
    </RECORD>
    <ROW>
    <COLUMN SOURCE="1" NAME="FirstName" xsi:type="SQLVARYCHAR"/>
    <COLUMN SOURCE="2" NAME="LastName" xsi:type="SQLVARYCHAR"/>
    <COLUMN SOURCE="3" NAME="Sex" xsi:type="SQLNVARCHAR"/>
    <COLUMN SOURCE="4" NAME="PersonalNr" xsi:type="SQLNVARCHAR"/>
    </ROW>
    </BCPFORMAT>
    [/highlight]


    Ok soviel zur Vorbereitung. Nun mein Problem. Die Datei die ich bekomme ist leider nicht TAB-getrennt sondern durch eine undefinierbare Anzahl Leerzeichen (je nachdem wie viele Zeichen z. B. der LastName hat werden die Daten mit Leerzeichen aufgefüllt). Also nehme ich mal sehr stark an, das es sich hier um eine Datei mit fixer Satzlänge handelt.

    Meine Frage ist nun: was muss ich im FormatFile machen damit ich sagen kann Filed1 ist x zeichen lang, Fild2 y und so weiter. Ich kenn mich gerade echt nicht aus. Mit Trennzeichen also z. B. TABS oder ";" wäre es ja recht einfach, leider ist es nicht zu bekommen. ich habe auch schon überlegt ob ich vorher nicht eine Batch über die Datei laufen lasse welche die Leerzeichen in Tabs umwandelt und dann darfür sorgt das nur mehr ein TAB zwischen den Feldern steht. Das halte ich aber für zu viel gebastel.

    Könnt ihr mir helfen?

    Danke und LG
    Michael

  • #2
    Hallo Michael,

    indem Du "TERMINATOR" leer lässt, also TERMINATOR="" (bis auch den letzten fürs Zeilenende).

    Beispiel siehe http://olafhelper.over-blog.de/artic...-49566298.html
    auch wenn dort ein Flat-Formatfile verwendet wurde; die Werte sind die gleichen.
    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

      Ich bin heute im Urlaub und kann es nicht testen aber eine Rückfrage hab ich schon:
      woher weiss BULK IMPORT dann wann eine Spalte zuende ist und das eine neue anfängt? weil dazwischen stehen ja x leerzeichen.

      LG

      Comment


      • #4
        Über den Parameter MAX_LENGTH="40".
        Da kein Terminator angegeben ist, den er finden könnte, werden genau die Anzahl an Zeichen eingelesen; hier also 40.
        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


        • #5
          Super, danke für deine Antwort, ich werde es gleich am Montag testen

          Comment


          • #6
            Es hat funktioniert, danke nochmals für deine Hilfe.

            Comment

            Working...
            X