SSIS-Datenfluss-Skript-task-Fehlerbehandlung
Ich habe einen script task, das Sie zum ausführen der Transformationen in der Mitte von einem SSIS-Datenfluss. Wenn das Skript fehlschlägt (sagen, es versucht zu konvertieren, alpha-numeric -) ich brauche es halt mit einer "failed" - status und wieder zurück in das Haupt-Paket und nutzen Sie die Datenfluss-Task Ereignis-Handler OnError zu würdevoll beenden.
Im moment finde ich, dass das Skript Aufgabe in den dataflow gibt eine .net-Fehler-popup, die ich habe, dann klar. Ich habe versucht einen Try Catch um den code scheint das zu stoppen debug-Fenster erscheinen, aber ich kann nicht scheinen, um es zu beenden Sie das Skript mit einem "failed-status', die bewirken, dass das Paket zu scheitern. Der Dts.TaskResult = Dts.Ergebnisse.Fehler scheint nicht gültig zu sein in der Datenfluss-Aufgaben. Im moment versuche ich, diese:
Catch e As System.Exception
Me.ComponentMetaData.FireError(-1, "", "Error: ", e.Message, 1, True)
While Not e.InnerException Is Nothing
e = e.InnerException
Me.ComponentMetaData.FireError(-1, "", "InnerException: ", e.Message, 1, True)
End While
Exit Sub
End Try
... aber all dies tut, ist, überspringen Sie die schlechten Zeilen. Der Datenfluss geht weiter. Das problem ist daran, es zu beenden, als gescheitert', so dass der error-handler onError-Ereignis im Paket ausgelöst wird.
Anregungen dankbar angenommen.
Glenn
InformationsquelleAutor Glenn M | 2009-09-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Skript Transformationen haben nicht die gleichen Funktionen für die Rücksendung Erfolg oder Misserfolg. Sie können erzwingen, dass einen Fehler mit diesem code:
Grundsätzlich das Error-Objekt (Funktion? Methode? was auch immer!) erlauben Sie simulieren ein Fehler. Das bedeutet, Sie können die Paket-Fehler mit diesem code.
Sie haben Recht, dass das entfernen der Try-Catch-block wird zulassen, Versagen, scheitern automatisch. Ich lief in dieses Problem, über 1 Monat her und kam zu dem gleichen Schluss. Ich kam zu der Lösung zuerst durch erzwingen eines Fehlers im Try-Catch-block. Dann habe ich einen Fehler im Catch-block. Sobald ich diese zu zwingen, die Fehler, erkannte ich, das problem war der Try-Catch-block insgesamt. Lassen Sie SSIS-die Ausnahme behandeln anstatt zu behandeln Sie es selber.
InformationsquelleAutor Registered User
Im Nachhinein die Division durch null Fehler ist nicht notwendig.
In meine aktuelle Lösung, ich bin die Erfassung der Fehler, dann tut ein FireError, dann reimplementing exception handling, wie diese:
Dies funktioniert, weil es enthalten ist, in eine Quelle Skript, und würde auch in einem Transformations-Skript, das die Daten bereitstellt Fluss wurde eingestellt, um zu scheitern, nachdem 1 Fehler. Wenn nicht, ist das Skript implementieren muss ein Fehler output-Pfad, die, ehrlich gesagt, ich habe keine Zeit für...
InformationsquelleAutor Stuart Steedman
Ich habe Suche für eine ganze Weile, um die Antwort auf diese Frage. Die pop-up-Fehler ist einfach zu lästig für mich! Um dies zu vermeiden, eine "einfache" Lösung (hack) ist dieser:
Anstatt wirft einen Fehler nach dem .FireError, erstellen Sie eine neue DT_UI1 Spalte Ausgabe im Skript-Umwandlung, z.B. "ValidationColumn", und legen Sie es auf 1 oder 0 (Nicht Boolean, aus Gründen, die noch deutlich werden wird).
Unmittelbar nach der Skript-Komponente, fügen Sie eine transformation für abgeleitete Spalten und ersetzen Sie die ValidationColumn mit der Formel: 1/ValidationColumn. (Dies funktioniert nicht mit Boolean). Dies ist natürlich generateds eine Division durch null Fehler, und (unter Verwendung der Standard-Einstellung) nicht die transformation für abgeleitete Spalten und damit sofort die data-flow-Komponente. Voila!
Error-log hat die ursprüngliche Validierung fehlgeschlagen-Nachricht aus .FireError, sofort gefolgt von einer Division durch null Fehler.
Dies ist vielleicht ein hack, aber bis jemand kommt mit einer besseren Idee...
BTW, ich bin mit diesem überprüfen Sie, dass Excel-Dateien die korrekten Header an der richtigen Stelle (oder alternative Plätze), in Verbindung mit IMEX=1, um zum laden von 2 oder mehr verschiedenen Spalte Variationen mit einem einzigen Datenfluss...
InformationsquelleAutor Stuart Steedman
Folgenden ist ein Skript Aufgabe, die ich innerhalb einer Schleife. Es ist keine direkte Antwort auf deine Frage – aber die Allgemeine Idee helfen.
Skript Aufgabe ist gehalten innerhalb einer Sequenz-container. Und die Reihenfolge der container
variable
namensPropagate
wird als false festgelegt. Auch für diesequence container
dieMaximumErrorCount
- Eigenschaft auf null gesetzt. Also, wenn ein Fehler geschehen im inneren der Sequenz-container, es ist in rot dargestellt, OnError-Ereignis ausgelöst, aber die Schleife wird fortgesetzt. Es ist wichtig, ein onerror-event-handler für die Sequenz-container für diese zu arbeiten.Innerhalb der Skript-task, es ist heftig gescheitert innen
catch
- block (Einstellung von task result als Fehler). Auch die Ausnahme-Nachricht in einer Variablen gespeichert ist, die für die Speicherung in die Fehler-Protokollierung-Tabelle. Dieser Fehler einfügen von Daten geschieht aus der OnError-event-handler (wie oben erwähnt) task sql ausführen.Finden: MSDN - ScriptObjectModel.TaskResult Eigenschaft
Den catch-block innerhalb der Skript-task sieht wie unten aufgeführt.
Ablaufsteuerung
InformationsquelleAutor Lijo