2009-04-09 19 views
0

Ich möchte SSIS verwenden, um Flat-File-Exporte der Datenbanktabellen zu erstellen und sie dann in verteilte SQL Express-Installationen zu importieren. Wie Sie vielleicht vermuten, ist SSIS in der Express-Version nicht verfügbar. Wenn ich den Großeinsatz, es Fehler mit:So exportieren Sie SSIS-Daten für SQL-Standard und importieren mit Masseneinfügung für SQL Express?

Msg 4866, Level 16, State 8, Line 1 The bulk load failed. The column is too long in the data file for row 1, column 5. Verify that the field terminator and row terminator are specified correctly.

Die erzeugte Datei ist ascii (1252) mit char (09) (Tab) zwischen den Feldern und char (0T) char (0a) endet eine Linie (Ich denke, das ist \ r \ n).

Dies ist das Format-Datei (4. Spalte ist Breite col):

9.0
5
1 SQLCHAR 0 12 "\t" 1 Record_ID ""
2 SQLCHAR 0 498 "\t" 2 Filename SQL Latin1 General CP1 CI AS
3 SQLCHAR 0 498 "\t" 3 Path SQL Latin1 General CP1 CI AS
4 SQLCHAR 0 12 "\t" 4 Width ""
5 SQLCHAR 0 12 "\r\n" 5 Height ""

Die Datenprobe Start ing vom Anfang der Datei:

Record_ID Filename Path Width Height
1437 BreadCakeCooknPie.eps G:\BakedGoods\BreadCakeCooknPie.eps 595 647
1438 CakeChocolateRoses.eps G:\BakedGoods\CakeChocolateRoses.eps 1200 848

ich es mit dem folgenden T-SQL-Code zu importieren:

bulk insert item_table from 'Item_Table.txt' with
( FORMATFILE='Item_Table.fmt', FIRSTROW=2)

Der Tisch Felder sind:

[Record_ID] [int] NULL,
[Filename] [nvarchar](249) NULL,
[Path] [nvarchar](249) NOT NULL,
[Width] [int] NULL,
[Height] [int] NULL

Alle Zuschreibungen zur Verfügung? Irgendeine Idee, wie man den Fehler behebt? Irgendeine Idee, wie man die Format-Akte ergreift, die von SSIS hergestellt wird? Irgendwelche anderen Ideen?

Vielen Dank für die Beantwortung meiner Frage.

Antwort

0

Dies ist eine Teilantwort. Offenbar können Sie mit BCP beginnen, eine Formatdatei und einen Textdatendump generieren lassen, die Formatdatei von bcp verwenden und den Textexport genau in SSIS abgleichen. Die Anordnung der physikalischen Felder in der Datendatei (obwohl Sie sie in der Formatdatei bestellen können) und keine fehlenden Felder (auch wenn Sie sie nicht benötigen) scheinen der Schlüssel zu sein.

Ich musste manuell den Text Export Metadaten passen die Formatdatei (Hand eingegeben die Metadaten unter Spalten in der Textdatei Verbindungsmanager). Dies führte dazu, dass die physische Reihenfolge der Felder in der Textdatei mit der physischen Reihenfolge in der Tabelle übereinstimmte (ich habe die Formatdateispalte verwendet, um diese vorher zu vergleichen, was nicht zu funktionieren schien).

Der aus SSIS exportierte Inhalt ist immer noch nicht gleich, aber nahe genug zum Importieren. Wenn zum Beispiel bcp die Daten exportiert hat, wurden hinter den Datumsfeldern 0,000 und hinter den numerischen Feldern 0,000 (float, usw.) eingefügt.

Meine endgültige Formatdatei, die funktionierte, ist unten. Beachten Sie, dass alle Felder SQLCHAR sind, obwohl einige Unicode sind, dass alle Größen falsch sind (int ist 10, aber es hat 12), (der Text ist 249 Länge, aber es hat 498), und (ich musste alle Felder einfügen) nicht nur die, die ich importieren wollte.Es wurde nicht richtig Felder übersprungen.)

Verrückte Welt. Irgendwelche Ideen, warum das der Fall wäre?

9.0
29
1 SQLCHAR 0 12 "\t" 1 Record_ID ""
2 SQLCHAR 0 498 "\t" 2 Filename SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 0 498 "\t" 3 Path SQL_Latin1_General_CP1_CI_AS
4 SQLCHAR 0 498 "\t" 4 Extension_Win SQL_Latin1_General_CP1_CI_AS
5 SQLCHAR 0 498 "\t" 5 Short_Filename_Win SQL_Latin1_General_CP1_CI_AS
6 SQLCHAR 0 498 "\t" 6 Volume SQL_Latin1_General_CP1_CI_AS
7 SQLCHAR 0 24 "\t" 7 Created ""
8 SQLCHAR 0 24 "\t" 8 Last_Modified ""
9 SQLCHAR 0 24 "\t" 9 Cataloged ""
10 SQLCHAR 0 24 "\t" 10 Last_Updated ""
11 SQLCHAR 0 12 "\t" 11 File_Size ""
12 SQLCHAR 0 498 "\t" 12 Mac_File_Type SQL_Latin1_General_CP1_CI_AS
13 SQLCHAR 0 498 "\t" 13 Mac_Creator SQL_Latin1_General_CP1_CI_AS
14 SQLCHAR 0 498 "\t" 14 Mac_Zone SQL_Latin1_General_CP1_CI_AS
15 SQLCHAR 0 12 "\t" 15 Thumbnail_Size ""
16 SQLCHAR 0 12 "\t" 16 Color_Mode ""
17 SQLCHAR 0 30 "\t" 17 Horizontal_Resolution ""
18 SQLCHAR 0 30 "\t" 18 Vertical_Resolution ""
19 SQLCHAR 0 12 "\t" 19 Width ""
20 SQLCHAR 0 12 "\t" 20 Height ""
21 SQLCHAR 0 12 "\t" 21 MultipageCount ""
22 SQLCHAR 0 12 "\t" 22 PlaceHolder ""
23 SQLCHAR 0 12 "\t" 23 Watermarked ""
24 SQLCHAR 0 12 "\t" 24 FileStoreID ""
25 SQLCHAR 0 498 "\t" 25 Directory_Path SQL_Latin1_General_CP1_CI_AS
26 SQLCHAR 0 12 "\t" 26 RID ""
27 SQLCHAR 0 498 "\t" 27 Cataloged_By SQL_Latin1_General_CP1_CI_AS
28 SQLCHAR 0 498 "\t" 28 Updated_By SQL_Latin1_General_CP1_CI_AS
29 SQLCHAR 0 0 "\r\n" 29 File_Description SQL_Latin1_General_CP1_CI_AS

+0

Obwohl nicht eine gute Antwort: mit der Befehlszeile bcp ich eine Formatdatei und tatsächliche Daten exportieren. Ich habe die SSIS-Textdateispalten (3. Tab) genau wie die Formatdatei eingerichtet. Dann richte ich die SSIS-Metadaten so ein, dass sie den exportierten BCP-Daten entsprechen. Alles importiert gut, einige Daten schneiden wie Sekunden an einem Datum ab. –

+0

Cool! Herzliche Glückwünsche! –

0

Haben Sie erwogen, Ihren SSIS-Export in einem Pipe oder Komma-Trennformat auszuführen? Es könnte Probleme mit der Verarbeitung des Tab-Zeichens zwischen Export und Import geben.

Alles, was Sie hier angelegt haben, scheint nicht auf ein Problem mit SSIS oder Bulk-Inserting zu verweisen, nur etwas mit dem Format der Datei selbst.

+0

ich versuchte Tabs Rohren und EOL zu Semikolons Schalt. Es beschwert sich, dass die Daten für das Feld zu lang sind. Ich habe sowohl Unicode als auch 1252 mit der gleichen Antwort ausprobiert. Es scheint, das Problem besteht darin, die INT als 10 Zeichen in der Textdatei nicht übersetzt in das 4 Byte int-Feld vielleicht zu drehen? –

+0

Hmm, das ist ziemlich verwirrend. Ich würde empfehlen, den Zeilenabschluss (eol) unverändert zu lassen (\ r \ n). Sehen Sie, ob das hilft. –

1

Besteht dieser Fehler im Quellenteil des Datenflusses? Können Sie die Metadaten zur Quelle posten? Ich habe gelegentlich mit flachen Dateien gefunden SSIS schätzt die Größen oder Datentypen nicht korrekt auf der Flatfile-Verbindung. Wenn dies der Fall ist, schlägt eine Datenflusstask für den Quellabschnitt des Imports fehl, sobald Daten gefunden werden, die die Länge der für die Position erwarteten Flat-File-Verbindung überschreiten.

Tritt dieser Fehler im Zielteil des Datenflusses auf?Wenn ja, funktioniert es zumindest, wenn Sie anstelle der eigentlichen Zieltabelle einen Datenleser als Ziel verwenden? Ich nehme an, Ihr Problem ist früher in der Pipeline, aber wenn es über den Quellbereich des Datenflusses hinausgeht, können Sie das Problem möglicherweise zumindest als Zielproblem isolieren.

Bitte teilen Sie uns mit, wo der Datenfluss tatsächlich unterbrochen wird.

+0

Es bricht, wenn ich den "Bulk Insert" aus einem Abfragefenster mache. Nichts im SSIS zeigt irgendwelche Fehler an. Seltsamerweise, wenn ich BCP verwende, um die Tabelle auf die Festplatte zu entladen, einschließlich der Formatdatei, versuche dann, sie in großen Mengen wieder einzufügen, es schlägt mit dem gleichen Fehler fehl. –

+0

Ich habe auch versucht, alle Felder in der Tabelle zu exportieren, da SP1 2005 SQL einen Fehler hat, bei dem bcp und Masseneinfügung mit einer Formatdatei fehlschlagen, die weniger Felder als die Zieltabelle angibt. Ich habe auch überprüft, dass alle Metadaten nicht Unicode sind. –

+0

Ich habe auch versucht, die Kopfzeile zu entfernen. –

Verwandte Themen