Import in SQL Server-format-Datei und der bulk insert

Hallo an alle ich habe ein schwieriges problem mit Hilfe BULK INSERT Befehl, wenn ich versuche, den import von Daten aus text-Datei.

Fand ich viele Artikel und Beispiele im Internet zu importieren mit BULK INSERT oder BCP - Programm, aber Sie nicht auf mich.

Das problem:

Ich mache den export aus Oracle in die text-Datei mit den Spalten-Trennzeichen {#} - und Zeilentrennzeichen <#> - und import in SQL Server.

Die Tabelle (SQL-Server):

CREATE TABLE my_DATA
(
ID_PK     NUMERIC(30)  NOT NULL ,
BEGIN_TIME    DATETIME  NULL ,
END_TIME      DATETIME  NULL
);

for Oracle:

CREATE TABLE my_DATA
(
ID_PK     NUMBER(30)  NOT NULL ,
BEGIN_TIME    TIMESTAMP  NULL ,
END_TIME      TIMESTAMP  NULL
);

Die Datei mit Trennzeichen:

ID_PK{#}BEGIN_TIME{#}END_TIME<#>296167{#}01/01/2012 01:30:00.000{#}01/01/2012 02:00:00.000<#>296178{#}01/01/2012 02:00:00.000{#}01/01/2012 02:30:00.000<#>

Das format der Datei ist:

9.0                         
3                           
1   SQLNUMERIC  0   19  {#} 1   ID_PK   ""
2   SQLDATETIME 0   8   {#} 2   BEGIN_TIME  ""
3   SQLDATETIME 0   8   <#> 3   END_TIME    ""

Also wenn ich Befehl:

BULK INSERT my_DATA 
FROM 'D:\my_DATA.txt' 
WITH 
(CODEPAGE = '1251',
 FIELDTERMINATOR = '{#}', 
 FIRSTROW = 2, 
 ROWTERMINATOR = '<#>' );

Funktioniert es, aber wenn ich versuche zu formatieren Datei funktioniert es nicht:

BULK INSERT my_DATA 
FROM 'D:\my_DATA.txt' 
WITH (CODEPAGE = '1251',
      FORMATFILE ='D:\format_file.txt');

Der Fehler ist:

Massenladen von Daten Fehler bei der Konvertierung (Typenkonflikt oder ungültiges Zeichen
für die angegebene codepage) für Zeile 2, Spalte 2 (begin_time).

Ich gesucht zu diesem problem, versuchen zu ändern, datetime, smalldate, versuchen Sie, ändern der Länge von 23 oder 24. Es funktioniert nicht. Also ich versuche zu importieren einer anderen Tabelle ohne Datum, die ich mit den numerischen Spalte und char-Spalten, aber ich Stand vor dem gleichen problem mit numerischen Spalte:

Massenladen von Daten Fehler bei der Konvertierung (Typenkonflikt oder ungültiges Zeichen
für die angegebene codepage) für Zeile 2, Spalte 1 (id_pk).

Tabelle:

CREATE TABLE unit_table
(
id_pk  NUMERIC(30)  NOT NULL ,
name             NVARCHAR(200)  NULL ,
name_full        NVARCHAR(200)  NULL ,
CONSTRAINT  PK_unit_table_2C1 PRIMARY KEY (bule_biz_unit_level_id_pk)
);

format Datei:

9.0
3
1       SQLNUMERIC    0       1      "{#}"      1     id_pk                              ""
2       SQLNCHAR      0       11     "{#}"      2     name                                              ""
3       SQLNCHAR      0       11     "{#}"      3     name_full                                         ""

Die Daten-Datei enthält nur 3 Zeilen (die bulk insert-Befehl ist die gleiche):

ID_PK{#}NAME{#}NAME_FULL<#>1{#}factory{#}factory<#>2{#}station{#}station<#>

Es ist interessant, wenn die Datei enthält nur 2 Zeilen:

ID_PK{#}NAME{#}NAME_FULL<#>1{#}factory{#}factory<#>

Das Ergebnis des bulk-insert ist:

(0 Zeile(N) betroffen)

Ich versuche auch zu tun Beispiel http://msdn.microsoft.com/en-us/library/ms178129.aspx aber Gesicht mit Fehler:

Können nicht bulk-laden, weil die Datei "D:\myTest.txt" konnte nicht gelesen werden.
Operating system error code (null).

Und der Letzte, ich habe versucht, dies mit bcp Programm und Gesicht mit Fehlern zu.

Jemand kann mir bei meinem problem helfen oder mir zumindest ein lauffähiges Beispiel mit bulk insert und format-Datei.

P. S. ich benutze MS SQL Server 2005 aktualisiert, um die Letzte version. OS ist Windows 7 x64.

Versuchen Sie, überspringen Sie alle Spalten in den Quelldaten? Trotz des seins in der Lage, um die name-Spalten in der format-Datei, ich glaube nicht, dass es darauf ankommt, (ich könnte falsch sein). Es stützt sich auf die ordinale position der Spalte. Ich habe die besten Glück mit dem XML-format-Dateien und die openrowset Methode.

InformationsquelleAutor Cherry | 2012-03-06

Schreibe einen Kommentar