Hall zusammen
Ich habe Probleme mit Bulk-Insert. Ich bekomme aus einer externen Software eine Datei die wie folgt aussieht:
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
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
[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
Comment