Panoramica della soluzione
puoi farlo aggiungendo un Flat File Connection Manager
aggiungi solo una colonna con Tipo di dati DT_WSTR
e una lunghezza di 4000
(supponendo che il suo nome sia Column0
) - Quindi tutte le colonne sono considerate come una grande colonna
- Nel
Dataflow task
aggiungi unScript Component
dopo ilFlat File Source
- Nel segno
Column0
come colonna di input e aggiungi 17 colonne di output - Nel
Input0_ProcessInputRow
dividere il metodoColumn0
per delimitatore, quindi controlla se la lunghezza dell'array è =17, quindi assegna valori alle colonne di output, altrimenti ignora la riga.
Soluzione dettagliata
- Aggiungi un gestore di connessione file flat, seleziona il file di testo
- Vai alla scheda Avanzate , Elimina tutte le colonne tranne una colonna
- Cambia il tipo di dati della colonna rimanente in
DT_WSTR
e lunghezza =4000
- Aggiungi un'attività DataFlow
- All'interno dell'attività Flusso di dati aggiungi un'origine file flat, un componente script e una destinazione OLEDB
- Nel componente Script, seleziona
Column0
come colonna di input
- Aggiungi 17 colonne di output (le colonne di output ottimali)
- Cambia il
OutputBuffer
SynchronousInput
proprietà suNone
- Seleziona il linguaggio di script su
Visual Basic
-
Nello Script Editor scrivi il seguente Script
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
-
Mappa le colonne di output alle colonne di destinazione