2009-01-13 6 views
8

Innerhalb einer Foreach-Schleife in SSIS gibt es eine Möglichkeit, dass, wenn eine Aufgabe fehlschlägt, Sie aus der Schleife zur nächsten Iteration ausbrechen können?Foreach Loop Microsoft SSIS - äquivalent zu break statement

Ich bin Schleife über XML-Dateien und führen eine Suche mit Werten innerhalb dieser Datei, wenn die Suche keine Werte zurückgibt, die ich darüber berichten möchte und dann keine anderen Aufgaben für diese Datei ausführen. Wenn es keine Break-Anweisung gibt, wie kann dies sonst erreicht werden?

Antwort

4

Sie können auch eine For-Schleife mit einer booleschen Bedingung wie Schleifen verwenden, während eine Variable gleich true ist. Wenn Sie dann aus dieser Schleife ausbrechen wollen, ändern Sie einfach den Wert dieser Variablen in "false" und dann brechen Sie aus der Schleife aus.

Beantworten Sie Ihre Frage ... eine Foreach-Schleife, die eine Sammlung und andere aufzählbare Konstrukte durchläuft, solange sie zum Schleifen existieren. Sie können also entweder einen Workaround finden oder einfach eine For-Schleife anstelle einer Foreach-Schleife verwenden. Auf diese Weise haben Sie mehr Kontrolle über die Schleife, weil Sie den Bedingungsausdruck setzen.

0

Die Suche kann umleiten, wenn keine Werte zurückgegeben werden, weg vom erfolgreichen Ablauf.

Sie benötigen den Rest Ihrer foreach-Schleife, um zu wissen, dass ein Fehler aufgetreten ist, also wäre eine Möglichkeit, eine Paketvariable bei einem Fehler zu setzen, kurz bevor Sie die Protokollierung durchführen.

Dann können Sie im Pfeil 'Erfolg' nach Ihrer Suche zu einem bedingten Erfolg ändern, so dass es nur fortgesetzt wird, wenn der Wert der Variablen nicht der Fehlerwert ist.

0

Also hatte ich gerade dieses Problem und löste es, indem ich a) die fehlgeschlagene Aufgabe auf eine Dummyaufgabe lenkte, die nichts tat und endete und b) die "FORCEEXECUTIONRESULTS" auf "SUCCESS" setzte, die genau so durchwühlte, wie ich wollte es zu.

0

Und noch ein weiterer Weg wäre, einen Sequenzcontainer in Ihre Schleife zu legen und dann die bedingten Schritte in den Sequenzcontainer zu legen. Jede Entscheidung, die fortfahren soll, muss nur den Sequenzcontainer verlassen. Sehr einfach zu implementieren mit all der Kontrolle, die Sie wollen, einschließlich Fehlerabfangen.