Kontakt  Impressum 
 
       Navigationslinks überspringen.   

SSIS Beispiel- Skripttask und Variable

Das Skripting ist eine der wichtigste Neuerungen in dem SQL Server Integration Services. Mit dem Skripting erschließt sich alle Möglichkeiten des .Net-Frameworks. Im Datenfluß wird die Skriptkomponente verwendet und in der Ablaufsteuerung die Skripttask. 
Eine häufige Anwendung der Skripttask ist Manipulation von Variablen. Gleichzeitig ist dies ein guter und einfacher Einstieg in das Skripting.

Beispielszenario

Dieses Beipiellszenario sieht vor, dass die User-Variable "Kalenderwoche" in einer Skripttask mit der aktuellen Kalenderwoche nach ISO-Norm gefüllt wird.
Anschließend steht diese Variable für die weitere Verwendung in anderen Tasks zur Verfügung.

Beispiel

  1. Legen Sie ein neues Integration Services-Projekt mit dem Namen »Skripttask-Kalenderwoche« an.
  2. Bleiben Sie in der Registerkarte Ablaufsteuerung und öffnen Sie die Toolbox.
  3. Markieren Sie in der Toolbox das Objekt Skripttask und ziehen Sie es in die Ablaufsteuerung.


  4. Abbildung 1: Das Objekt Skripttask in der geöffneten Toolbox

  5. Ändern Sie den Namen der Skripttask (rechte Maustaste/umbenennen) in "Skripttask Variable Kalenderwoche füllen" und passen Sie die Größe des Objektes an (rechte Maustaste/automatisch anpassen).
  6. Heben Sie die Markierung der Skripttask durch einen Klick in den leeren Bereich der Ablaufsteuerung auf. Dies ist wichtig, da sich der Gültigkeitsbereich der anzulegenden Variable auf den markierten Bereich bezieht.
  7. Öffnen Sie mit dem Menübefehl SSIS/Variablen das Variablenfenster. Alternativ können Sie dieses Fenster auch über den Menübefehl Ansicht/weitere Fenster/Variablen öffnen.
  8. Legen Sie die neue Variable Kalenderwoche mit der Schaltfläche an.


  9. Abbildung 2: Die Variable »Kalenderwoche« und die Skripttaskvariable in der Ablaufsteuerung

  10. Öffnen Sie mit einem Doppelklick auf die Skripttask den Skripttask-Editor. In der Eigenschaft Name können Sie den umbenannten Objektnamen sehen. Es ist natürlich auch möglich, den Namen an dieser Stelle zu ändern.
  11. Wechseln Sie auf die Seite Skript.
  12. Geben Sie bei ReadWriteVariables den Namen der neu angelegten Variablen an ("Kalenderwoche"). Achten Sie bitte unbedingt auf korrekte Groß- und Kleinschreibung. Andernfalls erhalten Sie während der Ausführung eine Fehlermeldung. Mehrere Variable sind durch ein Komma zu trennen.

    Abbildung 3: Der Skripttask-Editor mit unter ReadWriteVariables eingetragener Variable »Kalenderwoche«

    Auf ReadOnlyVariables können Sie im Skript nur lesend zugreifen. Auf Variable, die Sie unter ReadWriteVariables eintragen, können Sie lesend und schreibend zugreifen.
  13. Mit einem Klick auf die Schaltfläche "Skript entwerfen" öffnen Sie das Microsoft Visual Studio für Applikationen.


  14. Abbildung 4: Das Microsoft Visual Studio für Applikationen mit automatisch generiertem Programmgerüst

Visual Studio für Applikationen

Das Microsoft Visual Studio für Applikationen erleichtert Ihnen den Einstieg in die Programmierung, indem es den Zugriff auf die wichtigsten Namespaces automatisch generiert (Imports …), auf die wichtigsten Verweise im Projektmappen-Explorer referenziert und ein erstes Programmgerüst zur Verfügung stellt. Außerdem werden ein paar Kommentare, die Ihnen bei der Programmierung behilflich sein sollen, generiert.

Kommentare werden in VB.NET durch ein Hochkomma am Zeilenanfang gekennzeichnet. Kommentare erhalten automatisch die Schriftfarbe Grün. Die automatisch generierten Kommentare dürfen Sie schadlos löschen.

Die Referenzierung der Verweise im Projektmappen-Explorer nehmen wir an dieser Stelle einfach als gegeben hin. Denn diese Verweise werden für ein lauffähiges Programm benötigt und um ein solches handelt es sich hier: Der automatische Programmcode ist ein fehlerfreies und lauffähiges Skripttask-Programm!

Die ersten Programmzeilen eines VB.Net-Programms sind für die Definition der Namespaces reserviert. Nach dem Schlüsselwort Imports folgt der Name der Bibliothek, für die man den Namespace einrichtet. Dadurch sind die angesprochenen Bibliotheken im weiteren Programmverlauf bekannt und man kann eine verkürzte Schreibweise verwenden. Für die Rundung von Zahlung verwendet man round(Variable) anstatt System.Math.round(Variable). Das erleichtert die Programmierung erheblich.

Als eigentliches Programm wird die Funktion Main (Public Sub Main()) in der Klasse ScriptMain (Public Class SkriptMain) ausgeführt. Bislang beschränkt sich die Funktionalität allerdings darauf, anzugeben, dass die Skripttask "successfull" ausgeführt wurde (DTS.TaskResult = DTS.Results.Success).

Nachdem nun einige wichtige Informationen zum automatisch generierten Code angesprochen wurden, kann die Variable Kalenderwoche gefüllt werden.



Abbildung 5: Der Beispielcode

Variablen werden in einer Skripttask mit folgender Syntax angesprochen: DTS.Variables("Variablenname").Value

Die Variablen werden in der Collection DTS.Variables gespeichert und greifen auf den Wert der Variablen über die Eigenschaft Value zu. Die Collection stellt für jede Variable noch zahlreiche weitere Eigenschaften zur Verfügung. Diese Eigenschaften werden jedoch für eine Wertzuweisung nicht benötigt.

Die Funktion DatePart ist Bestandteil des .NET-Frameworks und gibt einen Teil des übergebenen Datums zurück. Dies kann der Monat, das Quartal, der Wochentag oder wie in unserem Beispiel die Kalenderwoche sein.

Der Funktion DatePart können bis zu vier Parameter übergeben werden. Das Ergebnis wird immer als Integerwert zurückgegeben.

Der erste Parameter gibt den gewünschten Datumsteil an (ww = Kalenderwoche), der zweite Parameter ist das auszuwertende Datum. In unserem Beispiel haben wir das Systemdatum verwendet: Now().

VB.NET bietet zwei Möglichkeiten für die Angabe des Datumsteils. Entweder ein String-Kürzel (ww) oder einen Enumerationswert (DateInterval.WeekOfYear).

Der dritte und vierte Parameter sind optional. Werden diese Parameter nicht mit übergeben, wird die Berechnung nach dem amerikanischen System durchgeführt. Für den Wochentag oder den Monat ist dies natürlich unwichtig. Allerdings weicht die Berechnung der Kalenderwoche in den USA von der Berechnung in Europa ab.

In den USA beginnt die Woche mit dem Sonntag und die erste Kalenderwoche im Jahr beinhaltet immer den 1. Januar.

In Europa gilt dagegen die ISO-Norm 8601: Die Woche beginnt mit dem Montag und die 1. Kalenderwoche hat mindestens vier Tage im aktuellen Jahr.

In unserem Beispiel DatePart("ww", Now(), FirstDayOfWeek.Monday, FirstWeekOfYear.FirstFourDays)

wird die Kalenderwoche des Systemdatums nach ISO-Norm als Integerwert zurückgegeben.

Weitere Details zu dieser Funktion können Sie den Books Online entnehmen: http://msdn2.microsoft.com/de-de/library/20ee97hz.aspx