Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So überspringen Sie eine fehlerhafte Zeile in der SSIS-Flatfile-Quelle

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 eine Script Component hinzu nach der Flat File Source
  • Markieren Sie Column0 als Eingabespalte und fügen Sie 17 Ausgabespalten hinzu
  • Im Input0_ProcessInputRow Methode split Column0 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

  1. Fügen Sie einen Flatfile-Verbindungsmanager hinzu, wählen Sie die Textdatei aus
  2. Gehen Sie zum Erweitert-Tab , Alle Spalten außer einer Spalte löschen
  3. Ändern Sie den Datentyp der verbleibenden Spalte zu DT_WSTR und Länge =4000

  1. Fügen Sie eine DataFlow-Aufgabe hinzu
  2. Fügen Sie innerhalb der Datenflussaufgabe eine Flatfilequelle, eine Skriptkomponente und ein OLEDB-Ziel hinzu

  1. Wählen Sie in der Skriptkomponente Column0 aus als Eingabespalte

  1. Fügen Sie 17 Ausgabespalten hinzu (die optimalen Ausgabespalten)
  2. Ändern Sie den OutputBuffer SynchronousInput -Eigenschaft auf None

  1. Wählen Sie die Skriptsprache zu Visual Basic

  1. 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
    
  2. Ordnen Sie die Ausgabespalten den Zielspalten zu