Kontakt  Impressum 
 
       Navigationslinks überspringen.   

Variablen

In einem Integration Services-Paket können Werte und Objekte in Variablen zwischengespeichert werden. Der Datentyp jeder Variablen wird bei der Variablenanlage festgelegt.
In zahlreichen Tasks und Komponenten kann auf Variable lesend zugegriffen werden. Es stehen jedoch nur wenige Tasks und Komponenten zur Verfügung um den Wert von Variablen zu ändern.
Eigenschaften von Tasks und Komponenten können dynamisch über Ausdrücke gesetzt werden. Die Nutzung von Variablen ist in allen Ausdrücken möglich.

Variablendefinition

Variable werden in einem Variablenfenster definiert und verwaltet. Das Variablenfenster öffnen Sie mit dem Menübefehl SSIS/Variablen oder alternativ mit dem Menübefehl Ansicht/weitere Fenster/Variablen.


Abbildung 1: Aufruf des Menübefehls "Variablen"


Abbildung 2: Das Variablenfenster

Im Fenster Variablen stehen fünf Menü-Schaltflächen für die Bearbeitung von Variablen zur Verfügung:
  • Variable neu anlegen
  • Variable löschen
  • Systemvariablen anzeigen
  • Benutzervariablen anzeigen
  • Variablenspalten auswählen
abr> Standardmäßig werden nur die Benutzervariablen angezeigt. Um einen Zugriff auf die Systemvariablen zu haben, muss die Anzeige über einen Klick auf "Systemvariablen anzeigen" aktiviert werden.
Der Variablenname ist frei wählbar und wird direkt im Variablenfenster editiert.

Variablen-Datentypen

Als Datentyp stehen alle Integration Services-Datentypen zur Verfügung. Eine gesonderte Stellung nimmt der Datentyp Object ein. Eine Variable vom Typ Object kann praktisch alle Arten von Daten aufnehmen. In ihr können DataSets, Bilder oder auch vollständige Dokumente gespeichert werden. Diese große Flexibilität hat allerdings auch einen Nachteil: Der Datenfluss kann keine Metadaten zu einer Variable vom Typ Object ermitteln. Anhand der Metadaten wird der Datenfluss verifiziert und optimiert. Dies entfällt bei Variablen vom Typ Object.
Außerdem ist es wegen der fehlenden Metadaten notwendig, dass die Daten von Typ Object fast immer konvertiert werden müssen. Die Integration Services können nicht wissen, welche Daten zum Zeitpunkt der Ausführung in einer Variablen vom Typ Object gespeichert sind.

Initialisierung von Variablen

Bei der Anlage von Variablen wird den Variablen explizit ein Initialwert zugewiesen. Nur der Datentyp Object macht hier eine Ausnahme. Dieser Datentyp wird mit einem leeren Objekt der Klasse System.Object initialisiert.
Alle Variablen können zusätzlich in der Paket-Konfiguration konfiguriert werden. Wird ein Paket gestartet, wird der Variablen zuerst ihr Initialwert zugewiesen und anschließend wird die Paketkonfiguration durchlaufen. Mit dem zuletzt zugewiesenen Wert wird das Paket dann ausgeführt.

Namespace

Jede Variable ist einem Namespace zugeordnet. Ein Variablen-Namespace ist eine übergeordnete Gruppierung der Variablen. Variable werden durch den Namespace und den Variablennamen eindeutig identifiziert.
Der Standard-Namespace für Benutzervariable ist Benutzer, respektive User in der amerikanischen Version. Systemvariable gehören zum Namespace System.
In der Fenstervoreinstellung des Variablenfensters ist die Anzeige der Spalte Namespace deaktiviert. Die Aktivierung wird im Fenster Variablenspalten auswählen vorgenommen. Das Fenster wird mit einem Klick auf das gleichnamige Symbol geöffnet.


Abbildung 3: Auswahl der im Fenster Variablen angezeigten Spalten

Nach der Aktivierung der Anzeige des Namespaces erscheint die Spalte Namespace im Variablenfenster und Sie haben Sie die Möglichkeit diesen zu ändern:


Abbildung 4: Die Spalte Namespace wird im Variablenfenster angezeigt

Ist der Variablenname über alle Namespaces eindeutig identifiziert, kann die Angabe des Namespaces entfallen. Es ist üblich, Systemvariablen qualifiziert mit führendem Namespace zu referenzieren. Für Benutzervariable wird dagegen oft die Kurzform gewählt. Kann die Variable über die Kurzform nicht eindeutig identifiziert werden, wird eine Fehlermeldung ausgegeben.
Im Ausdrucks-Generator zur Erstellung von Ausdrücken wird stets der qualifizierten Namen einer Variablen (@[Benutzer::Var]) verwendet. Finden Sie die Kurzform übersichtlicher, kann die Angabe des Namespaces gelöscht werden.
Normalerweise ist die Verwendung des richtigen Namespaces bei der Integration Services-Paketentwicklung von untergeordneter Bedeutung. Verwenden Sie allerdings Beispiele, die auf der amerikanischen SQL-Server-Version basieren, müssen Sie, bedingt durch den abweichenden Namespace für Benutzervariable, sehr genau auf die richtige Verwendung des Namespace achten.

Gültigkeitsbereich von Variablen

Variable haben einen Gültigkeitsbereich in dem sie zur Verfügung stehen. Eine Variable kann in ihrem Gültigkeitsbereich und in allen untergeordneten Objekten verwendet werden. In allen übergeordneten Objekten hingegen steht die Variable nicht zur Verfügung.
Der Gültigkeitsbereich wird im Fenster Variablen in der Spalte Bereich angegeben. Dieser Wer wird automatisch gesetzt. Sie haben bei der Variablenanlage keine Möglichkeit den Gültigkeitsbereich zu ändern!
Der Gültigkeitsbereich wird durch das markierte Objekt zum Zeitpunkt der Variablenanlage festgelegt. Ist kein Objekt markiert, wird als Gültigkeitsbereich das gesamte Paket Package) eingetragen.
Bei der Verwendung von Variablen gehen die Integration Services objektorientiert vor. Sie beginnen auf der untersten Ebene und suchen aufsteigend bis zum obersten Gültigkeitsbereich Package. Die zuerst gefundene Variable wird verwendet. Dieses Suchverhalten kann in den Integration Services zu unerwarteten Programmfehlern führen.
Wenn unterschiedliche Gültigkeitsbereiche verwendet werden, kann eine Variable unabsichtlich mehrfach in demselben Namespace definiert werden. Die Folge ist, dass das Paket möglicherweise eine andere Variable verwendet, als vom Entwickler vorgesehen. Da in den Integration Services keine Variablengesamtübersicht implementiert ist, wird diese Fehlerquelle leicht übersehen. Es ist deshalb zu empfehlen, stets globale Paketvariablen zu verwenden.


Sollten Sie irrtümlich eine Variable in einem falschen, untergeordneten Bereich definiert haben, überprüfen Sie bitte ganz genau, ob Sie diese Variable auch wieder gelöscht haben. Andernfalls kann dies bei der Programmierung zu unerwarteten Resultaten führen.


Verwendung von Variablen

Innerhalb der Integration Services können Variabeln flexibel verwendet werden. In vielen Komponenten kann auf Variable lesend und schreibend zugegriffen werden. Allerdings unterscheidet sich die Art des Zugriffes von Komponente zu Komponente. Dies ist dadurch begründet, dass jede Komponente und jede Task ein eigenes Entwicklungsprojekt ist. Da es bisher noch keine Best-Practice-Empfehlung für die Variablenschnittstelle gibt, hat jeder Komponenten-Entwickler diese neu kreiert.
Die Details der Variablenverwendung werden in den Einzelbesprechungen der Tasks und Komponenten aufgeführt. An dieser Stelle wird nur auf die häufigsten Verwendungsarten kurz eingegangen.
Eine sehr gute und einfache Möglichkeit Variablen zu ändern ist die Verwendung einer Skripttask. Die Variable wird auf der Seite Skript bei ReadWriteVariables eingetragen und im Skript selbst mit DTS.Variables("Variablenname").value angesprochen. In der Skriptkomponente werden Variable mit Me.Variables.Variablenname angesprochen. Zu beachten ist, dass es nur in der Procedure PostExecute möglich ist, auf Variable schreibend zuzugreifen.
In allen SQL-Tasks und SQL-Komponenten können Variable als Parameter verwendet werden. Die Möglichkeiten und die Syntax sind vom genutzten Datenbankprovider anhängig. Auch bei der Verwendung des SQL-Servers ist die Syntax davon abhängig, welcher Verbindungstyp (OLE DB, ADO.NET, ADO oder ODBC) verwendet wird.
Die beiden For-Container (For- und Foreach-) der Ablaufsteuerung bieten elegante Möglichkeiten Variablen automatisch zu füllen und in die Weiterbearbeitung einfließen zu lassen.
Der For-Schleifencontainer kann auch für die einfache Wertezuweisung einer Variablen verwendet werden. Näheres hierzu finden sie in der Beschreibung des For-Schleifencontainers.

Variablenverwendung in Ausdrücken

Ausdrücke sind ein empfehlenswertes Instrument um die Eigenschaften von Tasks und Komponenten zu konfigurieren. Aber erst durch die Verwendung von Variablen werden Ausdrücke flexibel. Deshalb hat die Verwendung von Variablen in Ausdrücken eine besondere Wichtigkeit. Allgemeine Informationen zum Thema Ausdrücke werden im Abschnitt "Ausdrücke" besprochen.
Variable werden in Ausdrücken durch das Zeichen "@" gekennzeichnet. Dem "@" folgt der Variablenname. Enthält der Variablenname Sonderzeichen, muss der Name von eckigen Klammern eingeschlossen werden. Beispiel: @[Benutzer::Variable]
Variablennamen können sowohl qualifiziert unter Angabe des Namespace (@[Benutzer::Variable]) oder in der Kurzform (@[Variable]) referenziert werden. Die eckigen Klammern können entfallen, wenn der Variablennamen keine Sonderzeichen enthält. Qualifizierte Variablennamen hingegen müssen immer mit eckigen Klammern eingegeben werden.
Im folgenden Beispiel wird die Verwendung von Variablen für die dynamische Konfiguration des Connection Strings in einem Flatfile-Verbindungs-Manager gezeigt. Der Speicherort der Flatfiles wird in der Eigenschaft Connection String gespeichert.
  1. Es wird das hier erstellte Beispielpaket verwendet, welches Sie unter Beispiele/Übersicht herunterladen können
  2. Legen Sie im Variablenfenster zwei Packagevariablen mit den Werten aus Abbildung 14.5 an:


    Abbildung 5: Die Variablen "Pfad" und "Datei"

  3. Wechseln Sie in die Datenflusstask und markieren Sie die Flatfile-Verbindung im Verbindungs-Manager.
  4. Öffnen Sie über das Kontextmenü oder mit F4 die Eigenschaften der Flatfile-Verbindung.
  5. Markieren Sie die Eigenschaft Expressions und klicken Sie anschließend auf die Erweiterungs-Schaltfläche (...). Es öffnet sich der Eigenschaftsausdrucks-Editor.
  6. Wählen Sie als Eigenschaft Connection String aus.
  7. Tragen Sie als Ausdruck "@[Benutzer::Pfad]+ @[Benutzer::Datei]" ein.


    Abbildung 6: Der Eintrag "@[Benutzer::Pfad]+ @[Benutzer::Datei]"

  8. Für die Bildung des Ausdrucks können Sie natürlich auch den Ausdrucks-Generator verwenden. Um diesen zu öffnen klicken Sie auf die Erweiterungsschaltfläche rechts neben dem Ausdruck.
  9. Schließen Sie das Ausdrucks- und das Eigenschaftsfenster und führen Sie das Paket aus.
  10. Mittels eines Ausdruckes wird nun der Connection-String der Input-Datei flexibel gebildet. Es wird die gewünschte Datei verwendet.

Ausdrücke als Variablenwert

Ausdrücke sind eine flexible Möglichkeit für die Wertzuweisung einer Variablen. Der Ausdruck wird zum Zeitpunkt der Variablenverwendung jedes Mal neu ausgewertet und das Ergebnis des Ausdruckes wird der Variable zugewiesen.
Damit Sie Ausdrücke als Variablenwert verwendet können, müssen Sie das Eigenschaftsfenster der Variable öffnen. Das Eigenschaftsfenster einer Variable wird mit F4 geöffnet. Die Variable muss hierzu im Variablenfenster markiert sein. Um den Wert einer Variablen mit einem Ausdruck zu füllen, muss die Eigenschaft EvaluateAsExpression auf True gesetzt werden. Die Standardbelegung ist False. Als Ausdruck (Expression) können alle Möglichkeiten der Ausdrucksprogrammierung genutzt werden. Die Ausdrucksprogrammierung wird unter Ausdrücke behandelt.