itrain-home  
home
 Aktuelle Seite:  knowhow sql transfer dts autospalte.asp 
 



 

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.


  1. Erstellen von zwei Verbindungen für Quelle und Ziel
  2. Hinzufügen eines Tasks "Daten transformieren"
  3. Erstellen von globalen Variablen für die Namen der Quell- und Zieltabelle
  4. Erstellen eines Tasks "Dynamische Eigenschaften", um die Quell- und Zieltabelle während der Paketausführung dynamisch zu setzen
  5. Erstellen eines "ActiveX Script" Tasks zum Erstellen einer neuen Transformation
  6. 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.

Microsoft OLEDB-Provider für SQL Server Verbindung

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.

Festlegen der Verbindungseigenschaften

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"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.

Globale Variablen erstellen

Task "dynamische Eigenschaften" erstellen

Über ein Task vom Typ "dynamische Eigenschaften" Task '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 Task 'ActiveX Script' 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.

Festlegen Quellschritt

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

Festlegen Quellschritt

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

Paket mit Workflow im Überblick

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.

DTS GO!Viel Erfolg beim Ausprobieren!


 

Fragen, Anregungen, Kritik? Email an sql@itrain.de!

 

Valid XHTML 1.0!

Leerraum

Dokument zum Drucken anzeigen
English Pages
Link-Tipp zum Thema "XML": www.15seconds.com/

Umfangreiche Site mit unendlich vielen Artikel rund um IIS, ASP und allem was dazu gehört.