Seit der 2008er Version von SSIS gibt es die Möglichkeit die Abfrage für den Lookup-im Full-Cache Modus zu dynamisieren. Damit ist es möglich für jede Ausführung eines Datenflusstasks die Abfragen der verwendeten Lookups zur Laufzeit anzupassen. Es ist damit dann möglich, die Datenmenge, die der jeweilige Lookup lädt, durch Anpassen einer where-Klausel einzuschränken. Ebenso könnte die zur Befüllung des Lookup-Caches genutzte Tabelle erst zur Laufzeit ausgewählt werden. Wählt man die Tabelle erst zur Laufzeit aus, muss die ausgewählte Tabelle in den Metadaten mit der zur Entwicklungszeit verwendeten Tabelle übereinstimmen.
Zur Veranschaulichung, wie einfach das ganze umzusetzen ist, wird das an einem einfachen Beispiel dargestellt:
Bei folgendem Datenflusstask soll die Lookup-Query dynamisch erstellt werden um den Tabellennamen aus einer Paket-Variablen zur Laufzeit zu ermitteln. Der Wert dieser Variablen kann dann z.B. aus der Paketkonfiguration stammen oder er kann in einem ForEach-Container zugewiesen werden um den gleichen Datenfluss mehrmals mit jeweils einer anderen Quell-Tabelle für den Lookup durchzuführen.
Die Quellabfrage für den hier verwendeten „Lookup Price“ in folgendem Datenflusstask kann wie folgt dynamisiert werden:
Der Datenflusstask, in dem sich der jeweilige Lookup-Task befindet hat eine Eigenschaft „SqlCommand“ die über eine Expression dynamisiert wird. Also Rechtsklick in den Datenflusstask und „Eigenschaften“ auswählen.
Auf die Schaltfläche mit den drei Punkten klicken. Es öffnet sich ein Editor für die Eigenschaften des Datenflusstasks
In dem Eigenschaftenausdrucks-Editor die Eigenschaft [LKP Price].[SqlCommand] auswählen. Hierbei ist „LKP Price“ der Name des jeweiligen Lookups. Es gibt für jeden Lookup in dem Datenflusstask eine solche Eigenschaft. Nach Auswahl der richtigen Eigenschaft den Ausdrucksgenerator öffnen durch Klick auf die Schaltfläche mit den vier Punkten am Ende der Zeile.
Dort die Abfrage eintragen. Die Variabel @[User::sTable] enthält den entsprechenden Tabellennamen. Die Variabel kann dann zur Laufzeit mit dem gewünschten Wert versehen werden. Lediglich die Metadaten (Anzahl der Columns, die Namen der Columns und deren Datentypen) müssen denen der Tabelle entsprechen, mit deren Metadaten das Paket entwickelt wurde. Sonst würde es zu einem Fehlerabbruch kommen.
Es wurde gezeigt, wie die Quellabfrage für einen Lookup im Full-Cache-Modus zur Laufzeit angepasst werden kann. Das ging bei SSIS in Versionen vor 2008 so nicht. Vorteile kann diese Vorgehensweise dann bringen, wenn der gleiche Datenfluss mehrmals ausgeführt wird und dann die für die jeweilige Ausführung benötigte Datenmange mittels einer angepassten where-Klausel eingeschränkt werden kann. Eine dynamische Auswahl der verwendeten Tabelle ist wie gezeigt auch sehr leicht möglich und mag in dem einen oder anderen Szenario hilfreich sein.