none
Invalid DateTime data type RRS feed

  • Pergunta

  • Boa tarde,

    Estou importando dados de arquivos DBF, utilizando o SSIS do Visual Studio 2013. Um dos campos contém valores inválidos para o tipo DateTime (00/01/1900). Já tentei diversas táticas para impedir que o pacote leia a data inválida, mas não consigo.

    Quando executo o pacote, recebo as seguintes mensagens de erro:

    [Tab_Cursos_Pedido [345]] Error: SSIS Error Code DTS_E_OLEDBERROR.  An OLE DB error has occurred. Error code: 0x80004005.An OLE DB record is available.  Source: "Microsoft OLE DB Provider for SQL Server"  Hresult: 0x80004005  Description: "Valor de caractere inválido para especificação de coerção.".
    [Tab_Cursos_Pedido [345]] Error: There was an error with Tab_Cursos_Pedido.Inputs[OLE DB Destination Input].Columns[dt_Pedido_DtCredDev] on Tab_Cursos_Pedido.Inputs[OLE DB Destination Input]. The column status returned was: "Conversion failed because the data value overflowed the specified type.".

    Qualquer ajuda será muito bem-vinda.

    Grato,

    Benedito.


    Benedito R. Almeida Filho - BI

    terça-feira, 31 de março de 2015 19:52

Respostas

  • Benedito,

    Não sei se já tentou usar o componente Derived Column. Se não tentou ainda, use-o antes de inserir os dados na tabela de destino no DataFlow Task.


    O código abaixo considera que seu campo é um DateTime e  coloca NULL para datas menores que '1900-01-01' ou quando o valor (convertido em String) é igual a '1900-01-00'

    ( (DT_WSTR,10)[dt_Pedido_DtCredDev]== "1900-01-00" || (DT_Date)[dt_Pedido_DtCredDev] <(DT_DATE)"1900-1-1") ? NULL(DT_DATE) : (DT_Date)[dt_Pedido_DtCredDev]

    Espero que ajude.


    Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */

    quarta-feira, 1 de abril de 2015 12:51

Todas as Respostas

  • Benedito,

    Não sei se já tentou usar o componente Derived Column. Se não tentou ainda, use-o antes de inserir os dados na tabela de destino no DataFlow Task.


    O código abaixo considera que seu campo é um DateTime e  coloca NULL para datas menores que '1900-01-01' ou quando o valor (convertido em String) é igual a '1900-01-00'

    ( (DT_WSTR,10)[dt_Pedido_DtCredDev]== "1900-01-00" || (DT_Date)[dt_Pedido_DtCredDev] <(DT_DATE)"1900-1-1") ? NULL(DT_DATE) : (DT_Date)[dt_Pedido_DtCredDev]

    Espero que ajude.


    Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */

    quarta-feira, 1 de abril de 2015 12:51
  • Na tabela destino, altere o tipo de coluna para varchar, e após a importação dos dados, trate estes valores.


    []´s

    quinta-feira, 9 de abril de 2015 15:10
  • Use expression language, conforme a dica da Mariana.

    Abs.


    Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp

    quinta-feira, 9 de abril de 2015 20:15
  • Excelente dica!

    Grato.


    Benedito R. Almeida Filho - BI

    sexta-feira, 10 de abril de 2015 19:08