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

come controllare la struttura delle colonne in ssis?

Soluzione

In base al tuo commento, stai gestendo file flat. Per risolvere questo problema, devi leggere tutte le colonne come una colonna e recuperare la struttura in movimento.

Dettagli

  1. Aggiungi prima un gestore di connessione file flat.
  2. Nel flat file connection manager, vai alla scheda Avanzate, rimuovi tutte le colonne e mantieni solo una colonna (Column0) .
  3. Cambia il tipo di colonna in DT_WSTR e la lunghezza in 4000.
  4. Aggiungi un Dataflow task
  5. All'interno dell'Dataflow task aggiungi una sorgente Flat File, un componente di script e una destinazione OLEDB.
  6. Apri il componente script, vai alla scheda Input/Output e aggiungi 8 colonne di output (Distributer_Code,Cust_code,cust_name,cust_add,zip,tel,dl_number,gstin)
  7. Cambia il linguaggio di script in Visual Basic.
  8. All'interno dello script scrivi il seguente codice.

    Dim Distributer_Code as integer = -1
    Dim Cust_code as integer = -1
    Dim cust_name as integer = -1
    Dim cust_add as integer = -1
    Dim zip as integer = -1
    Dim tel as integer = -1
    Dim dl_number as integer = -1
    Dim gstin as integer = -1
    Dim intRowIndex as integer = 0
    
    Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
    
        If intRowIndex = 0 then
    
            Dim strfields() as string = Row.Column0.split(CChar("|"))
            Dim idx as integer = 0
    
            For idx = 0 To strFields.length - 1
    
                Select case str
    
                Case "Distributer_Code"
                    Distributer_Code = idx  
                Case "Cust_code"
                    Cust_code = idx 
                Case "cust_name"
                    cust_name = idx 
                Case "cust_add"
                    cust_add = idx  
                Case "zip"
                    zip = idx   
                Case "tel"
                    tel = idx   
                Case "dl_number"
                    dl_number = idx 
                Case "gstin"
                    gstin = idx 
    
                End Select
    
            Next
    
        Else
    
            Dim strfields() as string = Row.Column0.split(CChar("|"))
    
            If Distributer_Code > -1 Then Row.DistributerCode = strfields(Distributer_Code)
            If Cust_code > -1 Then Row.Custcode = strfields(Cust_code)
            If cust_name > -1 Then Row.custname = strfields(cust_name)
            If cust_add > -1 Then Row.custadd = strfields(cust_add)
            If zip > -1 Then Row.zip = strfields(zip)
            If tel > -1 Then Row.tel = strfields(tel)
            If dl_number > -1 Then Row.dlnumber = strfields(dl_number)
            If gstin > -1 Then Row.gstin = strfields(gstin)
    
        End If
    
    
        intRowIndex += 1
    
    End Sub
    
  9. Mappa le colonne di output sulla destinazione OLEDB