Häufig bestehen SSIS-Pakete aus einem Schleifencontainer mit dem mehrere strukturgleiche Quelldateien in eine SQL-Server-Datenbank importiert werden. Da der Datentyp für die jeweilige Spalte in der Ziel-SQL-Server-Tabelle festgelegt wird, muss jeder Datensatz der Importdateien dieser Definition entsprechen, ansonsten kommt es zu Fehlern beim Importvorgang. Häufig kommt es jedoch vor, dass Datensätze aus den Quelldateien nicht dem Datentyp der Zieltabelle entsprechen. Für diese Datensätze muss der Datentyp entsprechend korrigiert werden. Allerdings liefert uns die Statusmeldung des SSIS-Pakets hier keine ausreichend ausführliche Information, welche der Quelldateien betroffen ist. In unserem neuesten Standard-SSIS-Paket, das als Grundlage in unseren Projekten dient, kann die betreffende Tabelle durch ein ausgeklügeltes Logging-Verhalten leicht identifiziert werden. In der Praxis begegnen uns jedoch oft SSIS-Pakete, die über dieses Logging-Verhalten noch nicht verfügen. Doch anstatt sich auf eine mühsame Fehlersuche innerhalb der Quelldateien einzulassen, bietet dieser Blogbeitrag einen pragmatischen und deutlich einfacheren Ansatz. Nämlich die Identifikation der Datentyp-Übeltäter mit Hilfe von Breakpoints.
In diesem Beispiel sollen zwei strukturgleiche Excel-Tabellen in eine SQL-Server-Tabelle importiert werden.
Hierfür wurde ein SSIS-Paket mit einem Datenfluss-Task erstellt. Dieser befindet sich einem Schleifencontainer und lädt mit Hilfe einer Variablen die Excel-Importdateien in die Ziel-SQL-Server-Tabelle. Die Variable wird im Fenster Variablen festgelegt und enthält den Dateinamen (Bezeichnung hier: „Excel“).
Um einen Fehler zu provozieren, enthält ein Datensatz innerhalb einer der Importdateien einen falschen Datentyp. Diese Zeichenfolge entspricht nicht dem float-Datentyp der Zieltabelle.
Startet man nun das SSIS-Paket kommt es, wie erwartet, zum Fehler.
Allerdings ist die Fehlermeldung im Status-Fenster nicht informativ genug. Es wird nicht klar, welche der Excel-Dateien betroffen ist.
Um sich jetzt die betroffene Excel-Datei im SSIS-Paket anzeigen lassen zu können, sind ein paar Einstellungen notwendig. Zunächst muss man zum Datenfluss-Task einen Breakpoint hinzufügen. Dies geschieht mittels Rechtsklick auf den Task – „Breakpoints bearbeiten“:
Es muss der Breakpoint „Unterbrechen, wenn der Container das OnError-Ereignis empfängt.“ aktiviert werden: Es muss der Breakpoint „Unterbrechen, wenn der Container das OnError-Ereignis empfängt.“ aktiviert werden:
Im Feld des Datenfluss-Tasks erscheint nun ein roter Punkt. Das bedeutet, dass der Breakpoint aktiv ist.
Startet man nun das SSIS-Paket erneut, wird dieses bei einem Fehler unterbrochen und in dem roten Punkt erscheint ein Pfeil.
Achtung: Da der Debug-Modus nur für das komplette Paket funktioniert, reicht es nicht den Container einzeln auszuführen.
Im nächsten Schritt muss per Rechtsklick auf den Task eine „Überwachung“ hinzugefügt werden:
Standardmäßig ist das Überwachungsfenster deaktiviert. Dieses kann über das Menü aktiviert werden (Debuggen, Fenster, Überwachen, Überwachen 1):
Das Fenster „Überwachen 1“ ist zunächst leer.
Es gilt die Variable „Excel“ zu überwachen, da diese vom Schleifencontainer genutzt wird und daher zu einem Zeitpunkt des Importprozesses den Dateinamen der Tabelle mit dem falschen Datentyp enthält.
Diese Variable muss nun per Drag-and-drop aus dem Fenster „Variablen” in das Fenster „Überwachen 1“ gezogen werden.
Nun wird uns in der Spalte „Wert“ der Dateiname der betreffenden Excel-Datei angezeigt.
Zu dem Zeitpunkt, an dem unser Breakpoint das Paket stoppt, enthält die Variable des Schleifencontainers genau den Dateinamen, in dem sich der Datensatz mit dem falschen Datentyp verbirgt. Nun haben wir den Übeltäter identifiziert und der Datentyp kann korrigiert werden.