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 = OpenRowsetpara deshabilitar el uso deFastLoad. 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