Lösungsübersicht
Sie können dies tun, indem Sie einen Flat File Connection Manager
hinzufügen Fügen Sie nur eine Spalte mit dem Datentyp DT_WSTR
hinzu und einer Länge von 4000
(vorausgesetzt, der Name ist Column0
) - Alle Spalten werden also als eine große Spalte betrachtet
- In der
Dataflow task
Fügen Sie eineScript Component
hinzu nach derFlat File Source
- Markieren Sie
Column0
als Eingabespalte und fügen Sie 17 Ausgabespalten hinzu - Im
Input0_ProcessInputRow
Methode splitColumn0
durch Trennzeichen, Dann prüfen, ob die Länge des Arrays =17 ist, dann den Ausgabespalten Werte zuweisen, sonst die Zeile ignorieren.
Detaillierte Lösung
- Fügen Sie einen Flatfile-Verbindungsmanager hinzu, wählen Sie die Textdatei aus
- Gehen Sie zum Erweitert-Tab , Alle Spalten außer einer Spalte löschen
- Ändern Sie den Datentyp der verbleibenden Spalte zu
DT_WSTR
und Länge =4000
- Fügen Sie eine DataFlow-Aufgabe hinzu
- Fügen Sie innerhalb der Datenflussaufgabe eine Flatfilequelle, eine Skriptkomponente und ein OLEDB-Ziel hinzu
- Wählen Sie in der Skriptkomponente
Column0
aus als Eingabespalte
- Fügen Sie 17 Ausgabespalten hinzu (die optimalen Ausgabespalten)
- Ändern Sie den
OutputBuffer
SynchronousInput
-Eigenschaft aufNone
- Wählen Sie die Skriptsprache zu
Visual Basic
-
Schreiben Sie im Skripteditor das folgende Skript
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer) If Not Row.Column0_IsNull AndAlso Not String.IsNullOrEmpty(Row.Column0.Trim) Then Dim strColumns As String() = Row.Column0.Split(CChar(";")) If strColumns.Length <> 17 Then Exit Sub Output0Buffer.AddRow() Output0Buffer.Column = strColumns(0) Output0Buffer.Column1 = strColumns(1) Output0Buffer.Column2 = strColumns(2) Output0Buffer.Column3 = strColumns(3) Output0Buffer.Column4 = strColumns(4) Output0Buffer.Column5 = strColumns(5) Output0Buffer.Column6 = strColumns(6) Output0Buffer.Column7 = strColumns(7) Output0Buffer.Column8 = strColumns(8) Output0Buffer.Column9 = strColumns(9) Output0Buffer.Column10 = strColumns(10) Output0Buffer.Column11 = strColumns(11) Output0Buffer.Column12 = strColumns(12) Output0Buffer.Column13 = strColumns(13) Output0Buffer.Column14 = strColumns(14) Output0Buffer.Column15 = strColumns(15) Output0Buffer.Column16 = strColumns(16) End If End Sub
-
Ordnen Sie die Ausgabespalten den Zielspalten zu