SQL Practice Blog – SQL Server, BizTalk und .NET Erfahrungen

SSIS: Dynamische Datenquellen

with one comment

Mit dem SQL Server 2005 wurden die Data Transformation Services (DTS) von den SQL Server Integration Services abgelöst. Bei den SQL Server Integration Services handelt es sich um eine komplette Neuentwicklung und nicht etwa um die Weiterentwicklung der Data Transformation Services. Das Prinzip der SQL Server Integration Services (SSIS) ist jedoch das gleiche: Extract – Transform – Load

Netzwerktopologie_Stern In den SSIS ist es möglich diverse Datenquellen, aus denen ich meine Daten beziehen kann, anzugeben. Ich möchte in diesem Beispiel Bezug auf eine ADO.NET Datenquelle nehmen. Dieser hinterlege ich beim Erstellen einen statischen Connection Manager, welcher sich immer zu der selben Datenquelle verbindet. Jedoch sieht es in der Praxis so aus, das ich mich häufig in verteilten Systemen bewege, also die Daten aus verschiedenen Quellen mit der selben Struktur extrahiere. Hierfür wäre es jedoch ein unnötiger Overhead genauso viele Connection Manager anzulegen wie ich Datenquellen habe. Sowas kann im schlimmsten Fall in die Hunderte gehen. Die zentrale Frage die sich daraus ergibt lautet:

Wie nutze ich dynamische Connection Strings bei ADO.NET Datenquellen?

controlflow Man benötigt als erstes eine Variable, in welche man den aktuellen Connection String hinterlegen kann. Dieser Connection String kann z.B. mit einem Script Task erzeugt bzw. aus einer beliebigen Quelle geladen werden. Hier ist es durchaus denkbar einen eigenen DataFlow Task zum Auslesen der Connection Strings zu erstellen. Auf der Abbildung rechts sieht man wie ein ControlFlow für dieses Szenario aussehen könnte.

Die Skriptkomponente muss dann den aktuellen Connection String in die Variable schreiben. Hier ist durchaus denkbar ein Array zu füllen, welches danach mit einer Schleife abgearbeitet werden kann. In der Schleife sollte sich dann der DataFlow Task befinden, welcher den ETL Prozess ausführt.

expressions In dem DataFlow Task muss ich nun eine ADO.NET Datenquellen anlegen, für dich ich zuerst einen statischen Connection Manager erstellen muss. Nachdem das Erstellen der ADO.NET Datenquelle abgeschlossen ist, begebe ich mich in die Eigenschaften des erstellten Connection Managers. Dort kann man nun dem Punkt Expressions der Eigenschaft ConnectionString einen Ausdruck zuweisen. Hier wähle ich nun meine Variable aus, welche den Connection String beinhaltet. Siehe linke Abbildung. Sollte ich die erstellte Variable nicht auswählen können, so kann dies daran liegen, das die Variable für einen falschen Bereich deklariert worden ist.

Damit haben wir das Problem auch schon gelöst. Es gilt nur eins immer zu beachten: Die Struktur der Datenquellen muss identisch sein!

Written by Robert Meyer

Februar 8, 2010 um 18:54

Eine Antwort

Subscribe to comments with RSS.

  1. Ein guter Ansatz, solle man mal weiterverfolgen. Das wird in Zukunft mit sicherheit noch mehr Interesse auf sich ziehen. Da habe ich doch schon neulich einen Artikel drüber gesehen? Vielen Dank, Lenz Lieske

    Lenz Lieske

    März 17, 2010 at 15:40


Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: