Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie überprüfe ich die Spaltenstruktur in SSIS?

Lösung

Basierend auf Ihrem Kommentar arbeiten Sie mit Flatfiles. Um dieses Problem zu lösen, müssen Sie alle Spalten als eine Spalte lesen und die Struktur unterwegs abrufen.

Einzelheiten

  1. Fügen Sie zuerst einen Flatfile-Verbindungsmanager hinzu.
  2. Gehen Sie im Flatfile-Verbindungsmanager zur Registerkarte Erweitert, entfernen Sie alle Spalten und behalten Sie nur eine Spalte (Column0) bei .
  3. Ändern Sie den Spaltentyp in DT_WSTR und die Länge in 4000.
  4. Fügen Sie eine Dataflow task hinzu
  5. Innerhalb der Dataflow task Fügen Sie eine Flatfile-Quelle, eine Skriptkomponente und ein OLEDB-Ziel hinzu.
  6. Öffnen Sie die Skriptkomponente, gehen Sie zur Registerkarte Input/Output und fügen Sie 8 Ausgabespalten hinzu (Distributer_Code,Cust_code,cust_name,cust_add,zip,tel,dl_number,gstin)
  7. Ändern Sie die Skriptsprache zu Visual Basic.
  8. Schreiben Sie in das Skript den folgenden Code.

    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. Ordnen Sie die Ausgabespalten dem OLEDB-Ziel zu