Mensaje de error al usar SQL Server Integration Services para insertar datos en la base de datos de IBM DB2

Versión del producto original:   Host Integration Server
Número KB original:   2848234

Síntomas

Imagine la siguiente situación:

  • Use SQL Server Integration Services (SSIS) y el proveedor OLE DB para DB2 para insertar datos en una base de datos de IBM DB2.

  • El destino ole db del paquete SSIS se configura con Accessmode = OpenRowset Using FastLoad .

  • La base de datos SQL Server de origen incluye algunos valores NULL para las columnas definidas como tipos de datos DateTime2 y Date que se insertarán en las columnas DB2 de IBM definidas como tipos de datos TimeStamp y Date, respectivamente.

Durante el proceso SSIS de insertar datos en la base de datos de IBM DB2, puede producirse un error similar al siguiente:

Error: Código de error de SSIS DTS_E_OLEDBERROR. Se ha producido un error ole db. Código de error: 0x80004005. Hay disponible un registro OLE DB. Source: "Microsoft DB2 OLE DB Provider" Hresult: 0x80004005 Description: "Unspecified error".

Hay disponible un registro OLE DB. Source: "Microsoft DB2 OLE DB Provider" Hresult: 0x80040E14 Description: "La sintaxis de la representación de cadena de un valor datetime es incorrecta. SQLSTATE: 22007, SQLCODE: -180".

Solución

Hay dos formas de resolver el problema.

  • Cambie el destino ole db en el paquete SSIS para usarlo AccessMode = OpenRowset para deshabilitar el uso de FastLoad . La desventaja de esta opción es que el rendimiento de las inserciones en la base de datos db2 será mucho más lento a medida que cada fila se inserta de una en una.

  • Agregue el siguiente parámetro a la cadena de conexión DB2 usada por SSIS para conectarse al sistema IBM DB2:

    Use Early Metadata=true