Manchmal ist die Fehlersuche bei SSIS Paketen eine aufwendige Angelegenheit. Oft treten neben inhaltlichen Fehlern auch technische Fehler auf. Fehlerquellen sind unterschiedliche Ausführungssprachen, aber auch Unterschiede zwischen den 32-Bit und 64-Bit Implementierungen. Hier hatte ich vor einiger Zeit Probleme bei Berechnungen mit Umkehrfunktionen von Sinus und Cosinus. Nun aber ist mir ein weiterer Unterschied aufgefallen, nämlich unterschiedliches Laufzeitverhalten von DTEXEC. EXE und DTSDEBUGHOST.EXE:
Eine Suche sollte nicht getroffene Zeilen einfach ausleiten, um diese zu verwerfen. Im BIDS war dies auch überhaupt kein Problem. Als Ziel für die umgeleiteten (ungültigen) Zeilen diente ein Multicast. Das Ausführen auf dem SQL Server führte immer wieder zum Fehler, unabhängig von Sprache und Adressbreite von DTEXEC auf dem Server. Die Fehlermeldung deutete auf einen Fehler beim Input in die Suche hin, was mich erst mal dazu bewog Datentypen in alle möglichen Richtungen zu casten und zu konvertieren, um hier einen Fehler auszuschließen.
Die Fehlermeldung lautete: Beschreibung: SSIS-Fehlercode ‚DTS_E_PROCESSINPUTFAILED‘. Fehler bei der ProcessInput-Methode in der Komponente ‚Suche‘ (25) mit dem Fehlercode 0x80070057 beim Verarbeiten der Eingabe ‚Eingabe der Suche‘ (26). Die identifizierte Komponente hat einen Fehler von der ProcessInput-Methode zurückgegeben. Der Fehler ist komponentenspezifisch.
Nach vielen Tests und ein wenig Recherche im Netz fand ich einen Blogeintrag, der einen ähnlichen Fehler beschreibt (http://social.msdn.microsoft.com/Forums/en-US/sqlintegrationservices/thread/9de27db3-6bde-4b71-950c-c3031399b45c).
Allerdings bezog sich dieser auf die Ausführung als Child bzw. Parent Paket. Nach einem Test wurde jedoch klar: es scheint vergleichbar zu sein.
Meine Lösung sah dann folgendermaßen aus:
· Den Lookup habe ich so eingestellt, dass ein Nicht-Treffer-Fehler ignoriert wird.
· Dies führt dazu, dass in die Column ein NULL geschrieben wird.
· Mit einem darauffolgenden Bedingten Teilen (Conditional Split) habe ich die Zeilen mit dem NULL in der Column dann rausgeworfen.
Und siehe da, sowohl im BIDS, als auch auf dem Server läuft das Paket nun ohne Fehler durch. Der Fehler scheint gelegentlich auf 2005 und 2008, 2008 R2 vorzukommen. Ich hatte leider noch keine Gelegenheit auf 2012 zu testen.
Timo Kroll
Senior Consultant