2016-09-12 2 views
0

Ich bin neu in SSIS und ich blieb völlig bei vielleicht einfacher Frage. Ich habe zwei Tabellen mit Eins-zu-viele-Beziehung. Ich analysiere HTML-Daten in einer Script-Komponente und erstelle zwei Ausgaben für Stammdaten- und Detailsätze. SSIS: Wie speichert man Stammdatensätze nach Bedingung?

Dann überprüfe ich die Bedingung für das Überschreiben der vorhandenen Daten, und wenn es erfüllt ist, schreibe ich Master-Datensatz in die Tabelle. Leider sieht mein Datenfluss wie auf dem obigen Bild aus (schematische Ansicht). Detaildatensätze werden auf jeden Fall hinzugefügt. Ich möchte die Details nur speichern, wenn die Bedingung erfüllt ist (der grüne Pfeil auf dem Bild), kann mir aber nicht vorstellen wie es geht.

+0

Wie lautet die Bedingung oder wie wird festgelegt, ob Sie die Stammdaten schreiben sollen? Abhängig davon, ob diese Bedingung vor der Skriptaufgabe oder innerhalb der Skriptaufgabe verschoben werden kann, können Sie einfach die Ausdrucksbeschränkung verwenden. Um dies im Skript auszuführen, fügen Sie eine Paketvariable hinzu, für die Sie den Wert im Skript festlegen können, und testen Sie dann den Wert in der Integritätsbedingung. – Matt

+0

Hallo @Matt! Bedingung hier ist nur, um das Problem zu veranschaulichen. Die reale Struktur ist komplexer. Aber danke für die Tipps! –

Antwort

0

guys! Schließlich gelang es mir, das Problem zu lösen. Ich habe den gesamten Prozess in zwei Datenflüsse aufgeteilt. In der ersten analysiere ich html, speichere bei Bedarf Stammdaten in der Tabelle und speichere geparste Detaildaten in der Paketobjektvariablen. Außerdem hat der erste Datenfluss eine Zeilenanzahlkomponente, die ihren Wert in der MasterRowCount-Variablen speichert. Im zweiten Datenfluss speichere ich die Detaildaten in der Tabelle. Der erste und der zweite Datenfluss sind durch eine Ausdruckseinschränkung verbunden (@MasterRowCount> 0). Daher wird der zweite Datenfluss nur ausgeführt, wenn die Stammdaten hinzugefügt wurden.

1

Ich habe das gleiche Problem, wenn wir die XML-Daten in übergeordneten untergeordneten Tabellen laden müssen. Dazu habe ich zwei Datenflusstasks im Paket hinzugefügt. In der ersten DFT habe ich XML analysiert und Daten nur in die Master-Tabelle geladen. In der zweiten DFT habe ich untergeordnete XML-Knoten-Daten analysiert und übergebe diese Ausgabe an Merge-Join-Operator (erste Eingabe). Jetzt müssen wir die zweite Eingabe übergeben, um den Join-Operator zusammenzuführen, für den ich Daten aus der Master-Tabelle extrahiert habe.

Master table insertion -

Child table insertion -

+0

Danke, @BhatiaAshish! –

+0

Ich habe die Idee. Eine, die ich nicht mag, ist, dass XML zweimal geparst werden würde. In meinem Fall ist die Quelle eine entfernte Webseite. Aber ich werde darüber nachdenken, wie ich es überwinden kann. Kann die HTML-Knoten zwischen den Datenflüssen als Objektvariable übertragen. –

Verwandte Themen