Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

come saltare una riga errata nell'origine del file flat ssis

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 un Script Component dopo il Flat File Source
  • Nel segno Column0 come colonna di input e aggiungi 17 colonne di output
  • Nel Input0_ProcessInputRow dividere il metodo Column0 per delimitatore, quindi controlla se la lunghezza dell'array è =17, quindi assegna valori alle colonne di output, altrimenti ignora la riga.

Soluzione dettagliata

  1. Aggiungi un gestore di connessione file flat, seleziona il file di testo
  2. Vai alla scheda Avanzate , Elimina tutte le colonne tranne una colonna
  3. Cambia il tipo di dati della colonna rimanente in DT_WSTR e lunghezza =4000

  1. Aggiungi un'attività DataFlow
  2. All'interno dell'attività Flusso di dati aggiungi un'origine file flat, un componente script e una destinazione OLEDB

  1. Nel componente Script, seleziona Column0 come colonna di input

  1. Aggiungi 17 colonne di output (le colonne di output ottimali)
  2. Cambia il OutputBuffer SynchronousInput proprietà su None

  1. Seleziona il linguaggio di script su Visual Basic

  1. 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
    
  2. Mappa le colonne di output alle colonne di destinazione