Soll die Skriptkomponente aufgerufen werden, wenn 0 Zeilen in einem datafluss an sie gesendet werden?

Ich lief in eine sehr seltsame Situation mit einem SSIS-Paket, mit dem ich gearbeitet habe.

Ich habe eine foreach-loop, die eine datafluss-Task enthält, die für jeden datasatz in einem Recordset-object ausgeführt wird, das vor der loop gefüllt wurde.

In der Dataflow-Aufgabe habe ich eine ADO.NET-Quelle, einen Lookup und schließlich eine Zielskriptkomponente. Die Skriptkomponente initialisiert ein datatable in PreExecute , fügt jede Zeile aus der Eingabe hinzu und post sendet den Datatable als Tabellenwertwert an eine gespeicherte Prozedur. Die Lookup-Task wird eingerichtet, um nur nicht übereinstimmende Zeilen an die Skriptkomponente zu senden.

Die ungerade Situation ist, dass ich gefunden habe, wenn alle Zeilen auf dem Lookup abgestimmt wurden, wurde die Skriptkomponente noch mit 0 Zeilen ausgeführt, die an sie gesendet wurden. Dies führte zu einem Fehler in der gespeicherten Proc, da ich nur erwartet hatte, dass es aufgerufen werden, wenn die Skriptkomponente mehr als 0 Zeilen erhalten hat. Ich habe das Problem in der gespeicherten proc selbst korrigiert, indem ich zunächst eine Überprüfung durchführen, dass tatsächlich data eingegangen sind.

In anderen Paketen habe ich sehr ähnliche Situationen mit Ziel-Skript-Komponenten eingerichtet nach Lookups, wo 0 datasätze eingegangen sind, und haben nicht dieses Verhalten dort auftreten – der einzige Unterschied ist, dass sie nicht in foreach Loops sind.

Also, ich würde wirklich gerne wissen, für zukünftige reference, wenn es das erwartete Verhalten einer SSIS-Skriptkomponente ist, die es mit 0 Zeilen ausführen würde?

PreExecute und PostExecute methods werden ausgeführt, auch wenn es keine Zeilen gibt , die von den folgenden Lookup Transformation Ausgängen an die Script Component umgeleitet werden, die als Destination in Data Flow Task konfiguriert ist.

  • Lookup Match Ausgabe
  • Lookup No Match Ausgabe

Stellen Sie sicher, dass das Paket, das Sie glauben, anders arbeitet als das, das nicht funktioniert, in der gleichen Weise konfiguriert ist.