sql >> Database teknologi >  >> RDS >> Sqlserver

hvordan man springer en dårlig række over i ssis flad filkilde

Løsningsoversigt

du kan gøre dette ved at tilføje en Flat File Connection Manager tilføje kun én kolonne med datatypen DT_WSTR og en længde på 4000 (forudsat at dets navn er Column0 ) - Så alle kolonner betragtes som én stor kolonne

  • I Dataflow task tilføje en Script Component efter Flat File Source
  • I mærket Column0 som inputkolonne og Tilføj 17 outputkolonner
  • I Input0_ProcessInputRow metode opdelt Column0 med afgrænsning. Kontroller derefter, om længden af ​​array er =17, og tildel derefter værdier til outputkolonner, ellers ignorer rækken.

Detaljeret løsning

  1. Tilføj en flad filforbindelsesadministrator, vælg tekstfilen
  2. Gå til fanen Avanceret , Slet alle kolonner undtagen én kolonne
  3. Skift datatypen for den tilbageværende kolonne til DT_WSTR og længde =4000

  1. Tilføj en DataFlow-opgave
  2. Tilføj en flad filkilde, scriptkomponent og OLEDB-destination inde i dataflowopgaven

  1. Vælg Column0 i scriptkomponenten som inputkolonne

  1. Tilføj 17 outputkolonner (de optimale outputkolonner)
  2. Skift OutputBuffer SynchronousInput egenskab til None

  1. Vælg scriptsproget til Visual Basic

  1. Skriv følgende script

    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. Tilknyt outputkolonnerne til destinationskolonnerne



  1. Sådan opretter du array i PostgreSQL

  2. Hvad svarer til bigint i C#?

  3. MySQL Syntaks fejlmeddelelse Operand skal indeholde 1 kolonne(r)

  4. SQL Server:konverter ((int)år,(int)måned,(int)dag) til Datetime