sql >> Databasteknik >  >> RDS >> Sqlserver

hur man hoppar över en dålig rad i ssis platt filkälla

Översikt över lösning

du kan göra detta genom att lägga till en Flat File Connection Manager lägg bara till en kolumn med datatypen DT_WSTR och en längd på 4000 (förutsatt att det heter Column0 ) - Så alla kolumner betraktas som en stor kolumn

  • I Dataflow task lägg till en Script Component efter Flat File Source
  • I märket Column0 som inmatningskolumn och Lägg till 17 utdatakolumner
  • I Input0_ProcessInputRow metod split Column0 med avgränsare, kontrollera sedan om längden på matrisen är =17 och tilldela sedan värden till utdatakolumner, annars ignorera raden.

Detaljerad lösning

  1. Lägg till en anslutningshanterare för platt fil, välj textfilen
  2. Gå till fliken Avancerat , Ta bort alla kolumner utom en kolumn
  3. Ändra datatypen för den återstående kolumnen till DT_WSTR och längd =4000

  1. Lägg till en DataFlow-uppgift
  2. Inuti dataflödesuppgiften lägg till en platt filkälla, skriptkomponent och OLEDB-destination

  1. Välj Column0 i skriptkomponenten som inmatningskolumn

  1. Lägg till 17 utdatakolumner (de optimala utdatakolumnerna)
  2. Ändra OutputBuffer SynchronousInput egenskap till None

  1. Välj skriptspråket för Visual Basic

  1. Skriv följande skript

    i Script Editor
    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 utdatakolumnerna till destinationskolumnerna



  1. Infogar flera rader i mysql

  2. PreparedStatement-fråga i Java mot Oracle

  3. Är kapslade transaktioner tillåtna i MySQL?

  4. Det går inte att ta bort databasen