Compartir a través de


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

Versión original del producto: Host Integration Server
Número de 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 está configurado con Accessmode = OpenRowset Using FastLoad.

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

Durante el proceso SSIS de inserción de datos en la base de datos 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. Origen: "Proveedor OLE DB de Microsoft DB2" Hresult: 0x80004005 Description: "Error no especificado".

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

Solución

Hay dos maneras de resolver el problema.

  • Cambie el destino de 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, ya que cada fila se inserta de una en una.

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

    Use Early Metadata=true