Compartilhar via


Mensagem de erro ao usar o SQL Server Integration Services para inserir dados no banco de dados IBM DB2

Versão original do produto: Host Integration Server
Número original do KB: 2848234

Sintomas

Considere o cenário a seguir.

  • Você usa o SQL Server Integration Services (SSIS) e o OLE DB Provider for DB2 para inserir dados em um banco de dados IBM DB2.

  • O Destino OLE DB no pacote SSIS é configurado com Accessmode = OpenRowset Using FastLoad.

  • O banco de dados SQL Server de origem inclui alguns valores NULL para colunas definidas como tipos de dados DateTime2 e Date que serão inseridos em colunas do IBM DB2 definidas como tipos de dados TimeStamp e Date, respectivamente.

Durante o processo SSIS de inserção de dados no banco de dados IBM DB2, pode ocorrer um erro semelhante ao seguinte:

Erro: Código de erro SSIS DTS_E_OLEDBERROR. Ocorreu um erro OLE DB. Código de erro: 0x80004005. Está disponível um registro OLE DB. Fonte: "Provedor OLE DB do Microsoft DB2" Hresult: 0x80004005 Descrição: "Erro não especificado".

Está disponível um registro OLE DB. Fonte: "Provedor OLE DB do Microsoft DB2" Hresult: 0x80040E14 Descrição: "A sintaxe da representação de cadeia de caracteres de um valor datetime está incorreta. SQLSTATE: 22007, SQLCODE: -180".

Solução

Existem duas maneiras de resolver o problema.

  • Altere o Destino OLE DB no pacote SSIS a ser usado AccessMode = OpenRowset para desabilitar o uso do FastLoad. A desvantagem dessa opção é que o desempenho das inserções no banco de dados DB2 será muito mais lento, pois cada linha é inserida uma de cada vez.

  • Inclua o seguinte parâmetro na cadeia de conexão do DB2 usada pelo SSIS para se conectar ao sistema IBM DB2:

    Use Early Metadata=true