Spaltenzuordnungen

Mit dem DTS-Import- und dem DTS-Export-Assistenten können Sie eine Quellspalte einer Zielspalte zuordnen, während die Daten kopiert werden.

Sie können durch folgende Schritte festlegen, wie eine Quellspalte einer Zielspalte zugeordnet wird:

  • Angeben, welche Quellspalten kopiert werden sollen.
  • Angeben der Zielspalten, in die die Daten kopiert werden sollen.
  • Ändern der Datentypen für die Daten, wenn eine gültige Datenkonvertierung zutreffend ist.

Sie können z. B. die ord_date-Spalte des smalldatetime-Datentyps in die new_ord_date-Zielspalte mit dem datetime-Datentyp kopieren. Sie könnten jedoch auch alle Spalten der sales-Tabelle, mit Ausnahme der payterms-Spalte, in eine neue Tabelle kopieren.

Wenn Sie eine neue Tabelle erstellen, die mehr Spalten als die Quelltabelle hat, können Sie im Assistenten nicht für alle Spalten der Zieltabelle Zuordnungen vornehmen. Sie sind auf die Zahl der Spalten beschränkt, die es in der Quelltabelle gibt. Verwenden Sie DTS-Designer für diesen Vorgang.

Sie können festlegen, was mit Daten geschehen soll, die bereits in der Zieltabelle vorhanden sind, bevor die Quelldaten kopiert werden.

Option | Zweck
Zieltabelle erstellen | Erstellt die Zieltabelle, bevor die Quelldaten kopiert werden (die Standardeinstellung, wenn die Tabelle nicht vorhanden ist). Wenn die Zieltabelle bereits vorhanden ist, tritt wahrscheinlich ein Fehler auf; es sei denn, das Kontrollkästchen Zieltabelle, falls vorhanden, löschen und neu erstellen ist aktiviert.
Zeilen in Zieltabelle löschen | Löscht alle Zeilen der Zieltabelle, bevor die Quelldaten kopiert werden. Diese Option ist nur dann verfügbar, wenn die Zieltabelle bereits existiert. Die Indizes und Einschränkungen der Zieltabelle bleiben unverändert.
Zeilen an Zieltabelle anhängen | Fügt die Quelldaten in die Zieltabelle ein (Standardeinstellung). Alle bereits vorhandenen Daten, Indizes und Einschränkungen der Zieltabelle bleiben unverändert. Die Zeilen werden nicht unbedingt an das Ende der Zieltabelle angefügt. Nur wenn Sie für die Zieltabelle einen gruppierten Index verwenden, können Sie festlegen, wo Zeilen eingefügt werden. Diese Option ist nur dann verfügbar, wenn die Zieltabelle bereits existiert.
SQL bearbeiten | Ändert die standardmäßige CREATE TABLE-Anweisung, die der DTS-Assistent erstellt hat.
Zieltabelle löschen und neu erstellen | Löscht gegebenenfalls die vorhandene Zieltabelle und erstellt sie dann neu, bevor die Daten in die Zieltabelle kopiert werden, Alle in der Zieltabelle gespeicherten Daten und alle Indizes werden dauerhaft gelöscht.
IDENTITY_INSERT aktivieren | Ermöglicht, dass explizite Werte in die Identitätsspalte einer Tabelle eingefügt werden (nur SQL Server). Diese Option ist nur dann verfügbar, wenn eine Identitätsspalte entdeckt wurde.

Für jede Quelldatenspalte unter Zuordnungen müssen die folgenden Eigenschaften angegeben sein.

Option | Zweck
Quelle | Wählen Sie den Namen der Spalte in der Quelltabelle aus, die in Ziel kopiert werden soll. Wählen Sie <ignorieren> aus, wenn die Quelldaten nicht kopiert werden sollen. Wenn Ziel als NOT NULL definiert ist, kann die Einstellung <ignorieren> einen Fehler verursachen, wenn für Ziel kein Standardwert vorhanden ist.
Ziel | Geben Sie den Namen der Spalte in der Zieltabelle ein, in die die Daten aus Quelle eingefügt werden sollen. Wenn die Zieltabelle erstellt wird, können Sie einen neuen Spaltennamen eingeben. Geben Sie <ignorieren> ein, wenn die Zielspalte nicht erstellt werden soll. Wenn Sie <ignorieren> eingegeben haben und die Zielspalte bereits vorhanden ist, wird Quelle für diese Spalte nicht kopiert.
Typ | Geben Sie für jede Ziel-Spalte den Datentyp ein. Es sollten nur gültige Datenkonvertierungen angegeben werden. Es ist zwar z. B. möglich, int-Werte ohne potenzielle Datenkürzung in tinyint-Werte zu konvertieren, der Vorgang führt aber zu einem Fehler, wenn die Konvertierung eine Datenkürzung zur Folge hat.
NULL zulassen | Aktivieren Sie diese Eigenschaft, wenn für Ziel NULL-Werte zulässig sind.
Größe | Geben Sie die jeweilige Länge in einer Einheit ein, die dem in der Ziel-Spalte angegebenen Datentyp entspricht. Dieser Wert ist nur für die folgenden Datentypen anwendbar: char, varchar, nchar, nvarchar, binary und varbinary. Ein Wert für Größe, der kleiner als die Länge von Ziel ist, kann eine Datenkürzung verursachen.
Genauigkeit | Geben Sie an, wie viele Dezimalstellen (Ziffern vor und nach dem Dezimalzeichen) maximal gespeichert werden können. Diese Eigenschaft gilt nur für die Datentypen decimal und numeric.
Dezimalstellen | Geben Sie an, wie viele Dezimalstellen (Ziffern nach dem Dezimalzeichen) maximal gespeichert werden können. Dieser Wert muss kleiner oder gleich dem Wert von Genauigkeit sein. Diese Eigenschaft gilt nur für die Datentypen decimal und numeric.

Die Standardeinstellungen für eine Zuordnung legen Folgendes fest:

  • Jede Spalte der Quelltabelle wird kopiert.
  • Die Eigenschaften der Quelltabelle (Spaltenname, Datentyp, NULL-Zulässigkeit, Größe, Genauigkeit und Dezimalstellen) werden für die Zieltabelle übernommen.
  • Die Quelldaten werden an die Zieltabelle angehängt. Falls die Zieltabelle nicht vorhanden ist, wird sie erstellt.


Erstellen eines Skripts für eine Datentransformation

Mit dem DTS-Import- und dem DTS-Export-Assistenten können Sie angeben, wie die jeweiligen Quelldaten transformiert werden sollen, wenn sie in die Zieltabelle kopiert werden. Es gibt folgende Möglichkeiten:

  • Kopieren der Quellspalten in die Zielspalten, ohne dass Änderungen vorgenommen werden.
  • Verwenden Sie Microsoft® JScript®, Microsoft Visual Basic® Scripting Edition oder ein anderes Microsoft ActiveX®-Skriptmodul, um für jede Spalte zu codieren, wie sie während des Kopierens in die Zielspalte transformiert werden soll. DTS durchläuft automatisch die Liste der verfügbaren Skriptmodule, d. h. die Liste der Module, die auf dem Computer installiert sind.
  • Laden Sie ein zuvor in VBScript oder JScript geschriebenes Skript, in dem beschrieben ist, wie jede Quellspalte während des Kopierens in die Zielspalte transformiert werden soll.
Option | Zweck
Quellspalten direkt in die Zielspalten kopieren | Kopiert die Quellspalten in die Zielspalten, ohne dass die Daten geändert werden. Es wird kein Transformationscode ausgeführt.
Erweitert | Festlegen von Transformationsflags, die definieren, wie Daten überprüft und konvertiert werden, bevor sie aus der Quelle in das Ziel kopiert werden.
Informationen während des Kopierens zum Ziel transformieren | Geben Sie an, dass jede Quellspalte entsprechend dem bereitgestellten VBScript- oder JScript-Skript transformiert werden soll, während sie in die Zielspalte kopiert wird.
Sprache | Wählen Sie die Skripterstellungssprache für das Schreiben des Transformationscodes aus. Klicken Sie auf Java Script oder VBScript.
Durchsuchen | Suchen Sie nach einer Datei, die bereits geschriebenen Transformationscode enthält, und laden Sie diese Datei.

Einige Beispiele für mögliche Transformationen sind:

  • Ändern aller Zeichenspalten in der Quelle, so dass diese Spalten im Ziel nur Großbuchstaben enthalten.
  • Kombinieren zweier Quellspalten und Einfügen dieser Spalten in eine Zielspalte. Eine surname-Spalte kann z. B. an eine first_name-Spalte angehängt und das Ergebnis als einzelne name-Spalte in die Zieltabelle eingefügt werden.
  • Aufteilen einer Quellspalte und Einfügen der Werte in mehrere Zielspalten. Eine einzelne Datumsspalte kann z. B. in Monats-, Tages- und Jahreswerte aufgeteilt werden.
  • Aktualisieren einer laufenden Summe für eine oder mehrere Spalten.
  • Überprüfen jeder Spalte auf Gültigkeit. Ungültige Zeilen können übersprungen werden.
Erstellen eines Skripts

In einem Transformationsskript kann jeder Vorgang ausgeführt werden, der von den Sprachen JScript oder VBScript unterstützt wird. DTS stellt drei Auflistungen bereit, die mit dem DTS-Import- oder dem DTS-Export-Assistenten verwendet werden können:

  • DTSDestination
  • DTSSource
  • DTSGlobalVariables

Jede der Auflistungen DTSDestination und DTSSource hat eine Eigenschaft und eine Methode.

Option | Zweck
Count-Eigenschaft | Geben Sie die Anzahl der Spalten des Objekts an. DTSDestination.Count gibt die Anzahl der Spalten in der Zieltabelle an. DTSSource.Count gibt die Zahl der Spalten in der Quelltabelle an.
Item-Methode | Geben Sie die Spalte des Objekts über den Namen oder die Ordinalzahl (Position) der Spalte an. Die Methode wird verwendet, um den jeweiligen Spaltenwert festzulegen oder abzurufen. Beispielsweise: DTSDestination(3) gibt die dritte Spalte der Zieltabelle an. DTSSource("au_lname") gibt die au_lname-Spalte der Quelltabelle an.

Die Werte der Quellspalten werden in die DTSSource-Auflistung kopiert. Der Wert jeder Quellspalte kann verwendet werden, um für die entsprechende Zielspalte einen neuen Wert zu berechnen und diesen der Zielspalte zuzuweisen. Das ActiveX-Transformationsskript schreibt den transformierten Wert in die DTSDestination-Spalte, die wiederum vom Server, auf dem DTSTransformScript ausgeführt wird, in den Arbeitsspeicherbereich geschrieben wird, den die DTS-Datapump für die Zeile reserviert hat.

Anmerkung In einem Skript können nur Spalten verwendet werden, die in Zuordnungen eingebunden sind.

Zusätzlich zur Count-Eigenschaft und zur Item-Methode unterstützen DTSSource und DTSDestination die folgenden ADO-Feldeigenschaften:

  • ActualSize
  • Attributes
  • DefinedSize
  • Name
  • NumericScale
  • OriginalValue
  • Genauigkeit
  • Recordset
  • Typ
  • UnderlyingValue
  • Wert

Die DTSLookups-Auflistung, die in Transformationen verwendet wird, die auf Suchtabellen verweisen, steht nur mit DTS-Designer und nicht mit dem DTS-Import- oder dem DTS-Export-Assistenten zur Verfügung.

Anmerkung ActiveX-Skripts können auch mithilfe von ActiveX Data Objects (ADO) auf Daten zugreifen und diese verarbeiten; oder sie können jedes beliebige Objekt aufrufen, das OLE-Automatisierung unterstützt. Ein Skript kann ein externes Programm (.exe) oder sogar eine Stapelverarbeitungsdatei (.cmd oder .bat) laden und ausführen. Transformationsskripts können außerdem andere DTS-Pakete abrufen und ausführen.

Transformationsrückgabecodes

Ein Transformationsrückgabecode zeigt der aufrufenden Anwendung (z. B. dem DTS-Import-Assistenten) an, ob die Transformation der Zeile erfolgreich abgeschlossen wurde oder ob von der aufrufenden Anwendung weitere Schritte ausgeführt werden müssen. Der Wert eines Transformationsrückgabecodes wird durch das Einstellen folgender Konstanten festgelegt.

Konstante | Beschreibung
DTSTransformStat_OK | Die Transformation war erfolgreich. Schreiben Sie die Zeile gegebenenfalls in die Zieltabelle. Rufen Sie keinen Fehler-Handler auf. Dies ist der Standardrückgabecode.
DTSTransformStat_SkipRow | Beenden Sie die weitere Verarbeitung dieser Zeile. Rufen Sie keinen Fehler-Handler auf.
DTSTransformStat_SkipFetch Rufen Sie nicht die nächste Zeile ab. Führen Sie die Transformation für die aktuelle Quell- und Zielzeile erneut aus. Für die Zielzeile wird keine Initialisierung vorgenommen.

Kann verwendet werden, um aus einer Eingabezeile mehrere Ausgabezeilen zu erstellen. Nachfolgende Transformationen werden weiterhin ausgeführt, es sei denn, DTSTransformStat_SkipRow ist ebenfalls festgelegt.
DTSTransformStat_SkipInsert | Schreiben Sie die aktuelle Zeile nicht in die Zieltabelle. Wird gewöhnlich zum Abrufen der nächsten Quellzeile verwendet, um ein einfaches Aggregat zu erstellen. Nachfolgende Transformationen werden weiterhin ausgeführt, es sei denn, DTSTransformStat_SkipRow ist ebenfalls festgelegt.
DTSTransformStat_Info Erfolg mit weiteren Informationen. Die Anwendung kann die Verarbeitung fortsetzen, indem sie entweder ihren pvTransformUserData-Wert liest (sofern die Anwendung dieses Wissen mit dem Transformationsserver teilt) oder über OLE DB-Fehlerdatensätze. Die DTS-Datapump ruft die Fehlersenke auf, sofern eine angegeben ist, inkrementiert aber nicht den Fehlerzeilenzähler.

Legen Sie das entsprechende Statusbit fest, das die Fehlersenke benötigt, um weitere Informationen zu beschaffen.

Verwenden Sie DTSTransformStat_Error, um einen Fehler anzuzeigen. Sie sollten auf keinen Fall DTSTransformStat_Info verwenden.
DTSTransformStat_OKInfo | Eine Kombination aus DTSTransformStat_OK und DTSTransformStat_Info. Schreiben Sie die Zeile gegebenenfalls in die Zieltabelle, und rufen Sie die Fehlersenke mit DTSTransformStat_Info auf.
DTSTransformStat_SkipRowInfo | Eine Kombination aus DTSTransformStat_SkipRow und DTSTransformStat_Info. Brechen Sie die weitere Verarbeitung dieser Zeile ab, und rufen Sie die Fehlersenke mit DTSTransformStat_Info auf.
DTSTransformStat_Error | Es ist ein Fehler aufgetreten. Übergeben Sie das Statusbit an die Fehlersenke, und verarbeiten Sie dies als einen Fehler.
DTSTransformStat_ErrorSkipRow | Beenden Sie die Verarbeitung dieser Zeile wegen eines Fehlers, und rufen Sie die Fehlersenke auf, um den Fehler zu behandeln. Schreiben Sie die Zeile nicht in eine Ausnahmedatei.
DTSTransformStat_AbortPump | Führen Sie eine bitweise ODER-Verknüpfung mit anderen Statusbits aus, um die Verarbeitung weiterer Zeilen abzubrechen.
DTSTransformStat_NoMoreRows | Das Ende des Recordsets ist erreicht worden.

Anmerkung Verwenden Sie in einem Skript nicht die dezimalen oder hexadezimalen Werte, sondern die Konstanten des Transformationsrückgabecodes.

Jeder Transformationsrückgabecode muss dem Namen einer JScript- oder VBScript-Transformationsfunktion zugeordnet sein, bevor diese Funktion beendet wird.

Nachfolgend ein Beispiel für ein Visual Basic-Transformationsskript:

'**********************************************************************

'    Visual Basic Transformation Script

'    Copy each source column to the

'    destination column and perform a transformation

'**********************************************************************

Function Transform()

'************ Declare Some Variables

Dim strPhone

Dim StrNew

Dim cChar

Dim iPhoneLen

Dim x

Dim y

'************ Copy Source to Destination

DTSDestination("CUSTOMERID") = DTSSource("CUSTOMERID")

DTSDestination("COMPANYNAME") = DTSSource("COMPANYNAME")

DTSDestination("CONTACTFIRSTNAME") = DTSSource("CONTACTFIRSTNAME")

DTSDestination("CONTACTLASTNAME") = DTSSource("CONTACTLASTNAME")

DTSDestination("BILLINGADDRESS") = DTSSource("BILLINGADDRESS")

DTSDestination("CITY") = DTSSource("CITY")

DTSDestination("POSTALCODE") = DTSSource("POSTALCODE")

DTSDestination("CONTACTTITLE") = DTSSource("CONTACTTITLE")

DTSDestination("FAXNUMBER") = DTSSource("FAXNUMBER")

'************ Call Any Function Or COM Object

DTSDestination("STATEORPROVINCE") = ucase(DTSSource("STATEORPROVINCE"))

DTSDestination("COUNTRY") = ucase(DTSSource("COUNTRY"))

'************ Scrub, Validate, and Calculate Missing Values

strPhone = DTSSource("PHONENUMBER")

y = Len(strPhone)

x = 1

While x <= y

    cChar = Mid(strPhone, x, 1)

    If (cChar >= "0" And cChar <= "9") Then

        StrNew = StrNew & cChar

    End If

    x = x + 1

Wend

'************ Validate and Format Data

If (Len(StrNew) <> 10) Then

    Transform = DTSTransformStat_Error

    Exit Function

Else

    DTSDestination("PHONENUMBER") = "(" + Mid(StrNew, 1, 3) + ") " + _

    Mid(StrNew, 4, 3) + "-" + Mid(StrNew, 7, 4)

End If

Transform = DTSTransformStat_OK

End Function