SSIS - Skript-Komponente, Split-single-Reihe auf mehrere Zeilen (Eltern-Kind-Variante)

Vielen Dank im Voraus für Ihre Hilfe. Ich brauche Hilfe beim schreiben von SSIS-Skript-Komponente zu begrenzen einzelne Zeile, mehrere Zeilen. Es gab viele hilfreiche blog-und-post-ich schaute unter:

http://beyondrelational.com/ask/public/questions/1324/ssis-script-component-split-single-row-to-multiple-rows-parent-child-variation.aspx

http://bi-polar23.blogspot.com/2008/06/splitting-delimited-column-in-ssis.html

Jedoch brauche ich ein wenig zusätzliche Hilfe auf die Codierung, um das Projekt abzuschließen. Im Grunde hier ist was ich tun will.

Input-Daten

 
ID Einzelteil-Name 
1 Apple01,02,Banana01,02,03 
2 Spoon1,2,Fork1,2,3,4 

Output-Daten

 
ParentID, ChildID Item Name 
1 1 Apple01 
1 2 Apple02 
1 3 Banana01 
1 4 Banana02 
1 5 Banana03 
2 1 Spoon1 
2 2 Spoon2 
2 3 Fork1 
2 4 Fork2 
2 5 Fork3 
2 6 Fork4 

Unten ist mein Versuch code, aber fühlen Sie sich frei, zu überarbeiten das ganze, wenn es illogic. SSIS-Asynchrone Ausgabe eingestellt ist.

Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
    Dim posID As Integer, childID As Integer
    Dim delimiter As String = ","
    Dim txtHolder As String, suffixHolder As String
    Dim itemName As String = Row.ItemName
    Dim keyField As Integer = Row.ID

    If Not (String.IsNullOrEmpty(itemList)) Then

        Dim inputListArray() As String = _
        itemList.Split(New String() {delimiter}, _
        StringSplitOptions.RemoveEmptyEntries)

        For Each item As String In inputListArray
            Output0Buffer.AddRow()
            Output0Buffer.ParentID = keyField

            If item.Length >= 3 Then
                txtHolder = Trim(item)
                Output0Buffer.ItemName = txtHolder

                'when item length is less than 3, it's suffix
            Else
                suffixHolder = Trim(item)
                txtHolder = Left(txtHolder.ToString(), Len(txtHolder) _
                    - Len(suffixHolder)) & suffixHolder.ToString()
                Output0Buffer.ItemName = txtHolder
            End If
        Next
    End If
End Sub

Den aktuellen code erzeugt die folgende Ausgabe

- ID, Element-Name 
1 Apple01 
1 02 
1 Banana01 
1 02 
1 03 
2 Spoon1 
2 2 
2 Fork1 
2 2 
2 3 
2 4 

Also, welche Fehler sind Sie immer?
Ich habe ein Logik-Problem mit der Codierung. Es ist nicht das Parsen der Zeile, als würde ich es wollte.
Bitte update das Problem mit dem, was der aktuelle code zu produzieren angesichts der oben genannten Eingänge an.
Der aktuelle code nicht Parsen durch Komma als Trennzeichen. Aber es hat die folgenden Probleme. 1) nicht verketten Präfix und suffix.e.g. Ich bekomme Apple01,02 in separaten Zeilen. Es soll ein Ausgang Apple01, Apple02 in separaten Zeilen 2)nicht produzieren parent-child-ID Nummerierung.
Bill, vielen Dank für das feedback. Ich bin neu in Codierung und habe ein problem mit der Problembehandlung

InformationsquelleAutor ElegantFellow | 2012-03-05

Schreibe einen Kommentar