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.
openrowset
Methode.
InformationsquelleAutor Cherry | 2012-03-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Danke an alle. Aber das problem war, dass MS SQL Server erfordert SQLCHAR geben, wenn Sie den Import von text-Datei und es spielt keine Rolle, welche Spalte Typ in der Datenbank. In meinem problem die Lösung ist das ersetzen einer beliebigen Spalte Arten, wie sqlnumeric festgelegt ist, SQLDATETIME zu SQLCHAR-in-format-Datei.
InformationsquelleAutor Cherry
Dies ist nicht genau das, was Sie gefragt, aber ich habe es getestet und sollten erhalten Sie, wo Sie gehen müssen. Soweit ich weiß, wird das folgende ausgeführt werden muss von dem server, der als Host SQL Server. Wahrscheinlich können Sie eine geplante Aufgabe einrichten, oder etwas anspruchsvoller die Straße hinunter.
Zuerst müssen Sie zum erstellen der format-Datei. Ich habe verschiedene Datentypen in dem Beispiel zu zeigen, wie Sie verwendet werden sollten.
Zweiten müssen Sie erstellen eine SQL -
INSERT
Erklärung für Ihre Daten:Und drittens, wenn Sie möchten, führen Sie von der Kommandozeile aus, wie würden Sie BCP, können Sie diese verwenden:
InformationsquelleAutor gangreen