|
Data Transformation Services
Dynamisches Festlegen von Quelle und Ziel mit Auto-Zuordnung der Spalten
Microsoft SQL Server 2000/DTS
Dieses kleine Beispiel soll zeigen, wie die Quell- und Zieltabelle einer einfachen
Datapump-Transformation dynamisch neu gesetzt werden können. Dabei werden alle Spalten 1:1 in
die jeweils festgelegte Zieltabelle übertragen. Voraussetzung ist, dass beide Tabellen die gleiche Struktur
aufweisen (gleiche Spalten in gleicher Reihenfolge)
Ablauf
Für dieses Beispiel werden zunächst zwei Datenquellen (beide SQL Server Verbindungen) in einem
neuen DTS-Paket erstellt. Anschließend wird ein Task vom Typ "Daten transformieren" hinzugefügt.
Danach werden zwei globale Variablen mit den Namen "Quelle" und "Ziel" definiert, die den
Namen der Quell- und Zieltabelle enthalten sollen (Sie können natürlich auch eine .INI-Datei, Abfrage oder Umgebungsvariable zur Festlegung
dieser Optionen verwenden)
Über ein Task vom Typ "Dynamische Eigenschaften" werden die Quell- und Zieltabelle dann
dynamisch mit dem Inhalt der jeweiligen Variable gefüllt.
Da durch die Änderung von Quell- und Zieltabelle die Transformationen zwischen den
Spalten u.U. ungültig wird, werden mit Hilfe eines "ActiveX Script" Tasks anschließend die
bestehenden Transformationen gelöscht und eine neue Transformation hinzugefügt (Diese "einfache"
Art von Transformationen kann nur verwendet werden, wenn Quell- und Zieltabelle eine identische Struktur
verwenden). Zuguterletzt wird dann noch der Workflow zwischen den einzelnen Tasks festgelegt.
Hier noch einmal alle Schritte im Überblick:
- Erstellen von zwei Verbindungen für Quelle und Ziel
- Hinzufügen eines Tasks "Daten transformieren"
- Erstellen von globalen Variablen für die Namen der Quell- und Zieltabelle
- Erstellen eines Tasks "Dynamische Eigenschaften", um die Quell- und Zieltabelle während
der Paketausführung dynamisch zu setzen
- Erstellen eines "ActiveX Script" Tasks zum Erstellen einer neuen Transformation
- Festlegen des Workflows
Erstellen von Verbindungen für Quelle und Ziel
In diesem Beispiel sollen verschiedene Tabellen aus der Beispieldatenbank "Nordwind" in eine zweite
Datenbank "Beispiel" kopiert werden. Die Tabellen sind in der Zieldatenbank "Beispiel" bereits vorhanden.
Zunächst wird eine Verbindung zur Datenbank "Nordwind" eingerichtet. Als Name für die Verbindung wird "Nordwind auf lokal" verwendet.
Datenquelle ist "Microsoft OLEDB Provider for SQL Server". Als Server wird der lokale Server verwendet und die Verbindung
wird über Windows-Authentifizierung hergestellt. Als Datenbank soll die Datenbank "Northwind" verwendet werden.
 Für die Zieldatenbank wird analog eine zweite SQL Server Verbindung mit dem Namen "Beispiel auf lokal" erstellt.
Diese Verbindung verwendet die "Beispiel"-Datenbank.
Hinzufügen eines Tasks "Daten transformieren"
Nachdem die beiden Verbindungen definiert sind, kann nun ein Task vom Typ "Daten transformieren" hinzugefügt werden.
Auf der Registerseite "Quelle" wird der Name der Quelltabelle ausgewählt. Dieser Name soll später über die dynamischen Eigenschaften verändert werden.
Auf der Registerseite "Ziel" wird der Name der Zieltabelle ausgewählt. Auch dieser Wert soll später dynamisch über eine globale Variable festgelegt werden.
Durch eine Klick auf die Registerseite "Transformationen" werden vom DTS-Designer automatisch die Transformationen zwischen den beiden Tabellen hergestellt.
Erstellen der globalen Variablen
Über den Menüpunkt "Paket, Eigenschaften" können die globalen Variablen definiert werden.
Für dieses Beispiel werden zwei Variablen mit dem Namen "Quelle" und "Ziel", beide vom Typ "string" erstellt.
Task "dynamische Eigenschaften" erstellen
Über ein Task vom Typ "dynamische Eigenschaften" werden nun die Datenquelle und das Ziel dynamisch festgelegt.
Als Beschreibung für das Task wird der Text "Quell- und Zieltabelle festlegen" angegeben.
Über die Schaltfläche "Hinzufügen" können Sie eine Eigenschaft auswählen, die dynamisch festgelegt werden soll.
Öffnen Sie in der Baumstruktur auf der linken Seite den Unterpunkt "Tasks" und wählen Sie den Punkt
DTSTask_DTSDataPumpTask_1 aus. Auf der rechten Seite erscheinen alle Eigenschaften des Datapump-Tasks.
Wählen Sie die Eigenschaft "SourceObjectName" aus und klicken Sie anschließend auf die Schaltfläche "Festlegen"
Als "Quelle" wird eine "Globale Variable" aus der Liste ausgewählt. In der Liste Variable wird die Variable "Quelle" ausgewählt.
Klicken Sie anschließend auf "OK", um die Änderungen zu übernehmen.
Auf die gleiche Art und Weise wird auch die Eigenschaft "DestinationObjectName" der Variablen "Ziel" zugewiesen.
"ActiveX Script" Task definieren
Im nächsten Schritt wird nun noch ein "ActiveX Script" Task hinzugefügt.
Tragen Sie als Beschreibung "Autozuordnung Spalten (1:1)" ein. Dieses Task soll die bestehenden
Transformationen löschen und eine neue "1:1"-Transformation zwischen den Spalten der Quell- und Zieltabelle
hinzufügen.
Der VBScript-Code sieht so aus:
Function Main()
Dim paket, task, i
Const DTSTransformFlag_AllowLosslessConversion = 512
' Objektvariable auf Paket setzen:
Set paket = DTSGlobalVariables.Parent
' Objektvariable auf DataPumpTask festlegen (Name kann über DynamicProperties ermittelt werden)
Set task = paket.Tasks("DTSTask_DTSDataPumpTask_1").CustomTask
' Entfernen der vorhandenen Transformationen
For i = task.Transformations.Count to 1 step - 1
task.Transformations.Remove i
Next
' Neue Transformation erstellen (s.a. Beispiel in BOL)
Set objTransform = task.Transformations.New( "DTS.DataPumpTransformCopy")
objTransform.Name = "Transform"
objTransform.TransformFlags = DTSTransformFlag_AllowLosslessConversion
task.Transformations.Add objTransform
Main = DTSTaskExecResult_Success
End Function
Workfloweigenschaften festlegen
Im letzten Schritt wird jetzt noch der Ablauf der verschiedenen Tasks festgelegt.
Für das "ActiveX Script" Task wird im Workflow als Quellschritt das Task "Quell- und Zieltabelle festlegen" angegeben.
Das "ActiveX Script" soll nur bei Erfolg ausgeführt werden.

Für die Datentransformation wird entsprechend als Quellschritt das Task "Autozuordnung Spalten" festgelegt.

Das folgende Bild zeigt das fertige Paket (versehen mit einigen Anmerkungen)

Damit sind alle notwendingen Einstellungen des Pakets vorgenommen. Jetzt können die Quell- und Zieltabelle
über die Paketeigenschaften neu gesetzt werden und anschließend ein Datentransfer gestartet werden.
Ist die Struktur beider Tabellen identisch kann das Paket erfolgreich ausgeführt werden.
Viel Erfolg beim Ausprobieren!
Fragen, Anregungen, Kritik? Email an sql@itrain.de!
|