Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

como pular uma linha ruim na fonte de arquivo simples ssis

Visão geral da solução


você pode fazer isso adicionando um Flat File Connection Manager adicione apenas uma coluna com o tipo de dados DT_WSTR e um comprimento de 4000 (assumindo que o nome é Column0 ) - Então todas as colunas são consideradas como uma grande coluna
  • Na Dataflow task adicione um Script Component após a Flat File Source
  • Na marca Column0 como coluna de entrada e adicionar 17 colunas de saída
  • Na Input0_ProcessInputRow divisão do método Column0 por delimitador, em seguida, verifique se o comprimento da matriz é =17, em seguida, atribua valores às colunas de saída, caso contrário, ignore a linha.

Solução detalhada

  1. Adicione um gerenciador de conexões de arquivo simples, selecione o arquivo de texto
  2. Vá para a Guia Avançado , Excluir todas as colunas, exceto uma coluna
  3. Altere o tipo de dados da coluna remanescente para DT_WSTR e comprimento =4000


  1. Adicionar uma tarefa do DataFlow
  2. Dentro da tarefa de fluxo de dados, adicione uma fonte de arquivo simples, um componente de script e um destino OLEDB


  1. No Script Component, selecione Column0 como coluna de entrada


  1. Adicione 17 colunas de saída (as colunas de saída ideais)
  2. Alterar o OutputBuffer SynchronousInput propriedade para None


  1. Selecione a linguagem de script para Visual Basic



  1. No Editor de Scripts escreva o seguinte 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. Mapeie as colunas de saída para as colunas de destino