Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

comment ignorer une mauvaise ligne dans la source du fichier plat ssis

Présentation de la solution

vous pouvez le faire en ajoutant un Flat File Connection Manager ajouter une seule colonne avec le type de données DT_WSTR et une longueur de 4000 (en supposant que son nom est Column0 ) - Ainsi, toutes les colonnes sont considérées comme une seule grande colonne

  • Dans la Dataflow task ajouter un Script Component après la Flat File Source
  • En repère Column0 comme colonne d'entrée et ajouter 17 colonnes de sortie
  • Dans le Input0_ProcessInputRow méthode split Column0 par délimiteur, puis vérifiez si la longueur du tableau est =17 puis attribuez des valeurs aux colonnes de sortie, sinon ignorez la ligne.

Solution détaillée

  1. Ajouter un gestionnaire de connexion de fichier plat, sélectionner le fichier texte
  2. Accédez à l'onglet Avancé , Supprimer toutes les colonnes sauf une colonne
  3. Changez le type de données de la colonne remianing en DT_WSTR et longueur =4000

  1. Ajouter une tâche DataFlow
  2. Dans la tâche de flux de données, ajoutez une source de fichier plat, un composant de script et une destination OLEDB

  1. Dans le composant de script, sélectionnez Column0 comme colonne d'entrée

  1. Ajouter 17 colonnes de sortie (les colonnes de sortie optimales)
  2. Modifier le OutputBuffer SynchronousInput propriété à None

  1. Sélectionnez le langage de script pour Visual Basic

  1. Dans l'éditeur de script, écrivez le script suivant

    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. Mappez les colonnes de sortie aux colonnes de destination