sql >> Base de Datos >  >> RDS >> Sqlserver

cómo omitir una fila incorrecta en la fuente de archivo plano ssis

Resumen de la solución

puede hacerlo agregando un Flat File Connection Manager agregue solo una columna con el tipo de datos DT_WSTR y una longitud de 4000 (asumiendo que su nombre es Column0 ) - Entonces todas las columnas se consideran como una gran columna

  • En la Dataflow task agregue un Script Component después de Flat File Source
  • En marca Column0 como columna de entrada y agregar 17 columnas de salida
  • En Input0_ProcessInputRow división del método Column0 por delimitador, luego verifique si la longitud de la matriz es =17 y luego asigne valores a las columnas de salida, de lo contrario, ignore la fila.

Solución detallada

  1. Agregue un administrador de conexión de archivos planos, seleccione el archivo de texto
  2. Ir a la pestaña Avanzado , Eliminar todas las columnas excepto una columna
  3. Cambie el tipo de datos de la columna restante a DT_WSTR y longitud =4000

  1. Agregar una tarea de flujo de datos
  2. Dentro de la tarea de flujo de datos, agregue un origen de archivo plano, un componente de secuencia de comandos y un destino OLEDB

  1. En el componente de secuencia de comandos, seleccione Column0 como columna de entrada

  1. Agregue 17 columnas de salida (las columnas de salida óptimas)
  2. Cambiar el OutputBuffer SynchronousInput propiedad a None

  1. Seleccione el lenguaje de script para Visual Basic

  1. En el Editor de secuencias de comandos, escriba la siguiente secuencia de comandos

    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. Asigne las columnas de salida a las columnas de destino