Fehlermeldung bei Verwendung von SQL Server Integration Services zum Einfügen von Daten in die IBM DB2-Datenbank

Ursprüngliche Produktversion:   Host Integration Server
Ursprüngliche KB-Nummer:   2848234

Problembeschreibung

Stellen Sie sich folgendes Szenario vor:

  • Sie verwenden SQL Server Integration Services (SSIS) und den OLE DB-Anbieter für DB2, um Daten in eine IBM DB2-Datenbank einzufügen.

  • Das OLE DB-Ziel im SSIS-Paket ist mit Accessmode = OpenRowset Using FastLoad konfiguriert.

  • Die Quelldatenbank SQL Server enthält einige NULL-Werte für Spalten, die als DateTime2- bzw. Date-Datentypen definiert sind, die in IBM DB2-Spalten eingefügt werden, die jeweils als TimeStamp- bzw. Date-Datentypen definiert sind.

Während des SSIS-Vorgangs zum Einfügen von Daten in die IBM DB2-Datenbank kann ein Fehler auftreten, der dem folgenden Fehler ähnelt:

Fehler: SSIS-Fehlercode DTS_E_OLEDBERROR. Ein OLE DB-Fehler ist aufgetreten. Fehlercode: 0x80004005. Ein OLE DB-Eintrag ist verfügbar. Quelle: "Microsoft DB2 OLE DB Provider" Hresult: 0x80004005 Description: "Unspecified error".

Ein OLE DB-Eintrag ist verfügbar. Quelle: "Microsoft DB2 OLE DB Provider" Hresult: 0x80040E14 Description: "Die Syntax der Zeichenfolgendarstellung eines Datetime-Werts ist falsch. SQLSTATE: 22007, SQLCODE: -180".

Lösung

Es gibt zwei Möglichkeiten, das Problem zu beheben.

  • Ändern Sie das OLE DB-Ziel im SSIS-Paket, AccessMode = OpenRowset um die Verwendung von zu FastLoad deaktivieren. Der Nachteil dieser Option besteht darin, dass die Leistung der Einfügungen in die DB2-Datenbank wesentlich langsamer ist, da jede Zeile einzeln eingefügt wird.

  • Fügen Sie der db2-Verbindungszeichenfolge, die von SSIS zum Herstellen einer Verbindung mit dem IBM DB2-System verwendet wird, den folgenden Parameter hinzu:

    Use Early Metadata=true