Task "DbTransfer"
Die folgenden Eigenschaften gelten für den Task vom Typ "DbTransfer". Dieser Task stellt eine generisch konfigurierbare Möglichkeit dar, um Datensätze von einem unterstützten Datenbanksystem in ein anderes Datenbanksystem zu übertragen.
Eigenschaft | Beschreibung |
|---|---|
Schedule[].Task[].InputDb.ConnectionString*(§) Schedule[].Task[].InputDb.Password(§) Schedule[].Task[].InputDb.Select* | In der Eigenschaft In der Eigenschaft Das Passwort, das in der Verbindungszeichenfolge benötigt wird, kann separat in |
Schedule[].Task[].OutputDb.ConnectionString*(§) Schedule[].Task[].OutputDb.Password(§) Schedule[].Task[].OutputDb.Insert* Schedule[].Task[].OutputDb.Delete | Die Eigenschaften Für das Schreiben der Daten ist eine INSERT-Anweisung in der Eigenschaft In der Eigenschaft |
Schedule[].Task[].Field[] | Definition der Felder, die von den Quelldatensätzen in die Zieldatensätze übertragen werden Die Felder in Form mehrerer Teilparameter definiert:
Der Name des Quellfeldes ist abhängig vom Quellsystem. Bei einer relationalen Datenbank entspricht der Name z. B. dem Feldnamen, der von der SELECT-Abfrage zurückgeliefert wird. Berechnete oder aggregierte Felder haben keinen dedizierten Namen. Wenn für die aggregierten Felder nicht per AS-Klausel explizit ein Name vorgegeben ist, erhalten diese den Pseudonamen Felder, die nicht aus den Eingabedaten stammen und somit keinen Der Parameter |
Schedule[].Task[].LogRecords Schedule[].Task[].LogMacros | Wahrheitswerte, ob die Inhalte eingelesener und aufbereiteter Datensätze und die Einzelschritte der Makroausführung protokolliert werden Im Standard werden Informationen dieser Art mit dem Log-Grad Standardwert: |
Schedule[].Task[].MaxErrorRecords | Zahlenwert, nach wie vielen fehlerhaft verarbeiteten Datensätzen der Task als Ganzes abgebrochen wird Um trotz vereinzelter Fehler möglichst viele Datensätze ohne Abbruch zu übertragen, kann hier ein entsprechender Schwellwert definiert werden, wie viele Fehler toleriert werden sollen. Für die vor einem Abbruch bereits erfolgreich transferierten Sätze findet kein Rollback statt. Standardwert: |
Beispiel
Der folgenden Auszug einer Task-Konfiguration dient als Beispiel für einen einfachen Datentransfer von einer Datenbanktabelle des Microsoft SQL Servers in eine andere Datenbanktabelle:
{
"Type": "DbTransfer",
"InputDb": {
…
"Select": "SELECT [InField1], [InField2], [InField3] FROM [InTable]"
},
"OutputDb": {
…
"Delete": "DELETE FROM [OutTable]",
"Insert": "INSERT INTO [OutTable]([OutField1], [OutField2], [OutField3])
VALUES (@FIELD1, @FIELD2, @FIELD3)"
},
"Field": [
"FIELD1, InField1",
"FIELD2, InField2",
"FIELD3, InField3"
]
}Dieses Beispiel zeigt, dass die Zuordnung der internen Feldnamen zu den Eingabefeldern aus der Quelltabelle über die .Fields-Auflistung erfolgt. Die Zuordnung zu den Ausgabefeldern in der Zieltabelle erfolgt hingegen direkt innerhalb der INSERT-Anweisung.
Bei der Übertragung der Quellfeldwerte in die Zielfeldwerte muss auf die Kompatibilität der Datentypen geachtet werden. Ohne zusätzliche Aufbereitung durch Makrofunktionen werden die Quellwerte unverändert in die Zielfelder übernommen. Jedoch erfolgt bereits hier eine implizite Konvertierung der eingelesenen Werte in einen äquivalenten .NET-Datentyp und bei der Ausgabe zurück in den Zieldatentyp. Dabei werden alle .NET-Datentypen unterstützt. Die direkte Weitergabe der Werte kann bei einigen speziellen Datentypen der Datenbanksysteme aber dennoch problematisch sein, wenn diese Typen kein direktes Äquivalent in .NET haben oder die Quelldatenbank und die Zieldatenbank nicht die gleichen Typen nutzen.
Wenn Makrofunktionen zur Generierung und Aufbereitung der Werte verwendet werden, wird der Umfang der nutzbaren Datentypen weiter beschränkt auf die Typen, die der interne Makrointerpreter unterstützt. Die vielfältigen Ausprägungen von Datenbank-Datentypen können in der Regel implizit in die Datentypen des Makrointerpreters umgewandelt werden. Text-Datentypen und numerische Datentypen können in der Regel z. B. implizit in die Typen "Text" und "Number" des Makrointerpreters umgewandelt werden und dadurch in Makros genutzt werden. Ausgeschlossen hiervon sind Datentypen, die Binärdaten aufnehmen. Alternativ zu den internen Makrofunktionen können Quellwerte und Zielwerte auch direkt innerhalb der SELECT- und INSERT-Anweisungen durch entsprechende CAST-Funktionen konvertiert werden.
Bei der Verwendung von Makrofunktionen ist außerdem zu beachten, dass der interne Makrointerpreter NULL-Werte nicht unterstützt. Der Makrointerpreter verwendet stattdessen leere Standardwerte in Abhängigkeit vom Datentyp, z. B. einen Leerstring ("") für einen leeren Textwert. Eine Makrofunktion liefert daher kein NULL als Ergebnis zurück. Der Umgang mit NULL-Werten als Eingabeparameter ist abhängig von der konkreten Implementierung der Makrofunktion. Wenn in dem obigen Beispiel das Quellfeld InField1 ein Textfeld wäre und das Zielfeld OutField1 einen numerischen Datenbank-Datentyp hätte, könnte eine Makrofunktion zur typgerechten Konvertierung ParseAsNumber(@FIELD1) lauten. Wenn aber z. B. aber der Quellwert NULL ist, wird diese Funktion als Ergebnis den Wert 0 für einen leeren Zahlenwert zurückliefern. Um explizit den Originalwert NULL an das Zielfeld durchzureichen, ist eine zusätzliche Prüfung der Art If(!IsNull(@FIELD09), ParseAsNumber(@FIELD09)) erforderlich. Die Konvertierung wird dann nur durchgeführt, wenn der Quellwert nicht NULL ist, ansonsten bliebe der Wert unverändert.