none
Importar coluna de tipo "real" de um ficheiro de texto (bulk insert) RRS feed

  • Pergunta

  • Viva!

    Estou com dificuldades ao importar dados de um ficheiro de texto através da operação BULK.

    A tabela para onde insiro tem a coluna Discount como real, está correcto. O "real" no sqlserver usa o '.' como separador. Acontecer que nos meus ficheiros o separador usado é ','. Não posso alterar os ficheiros. Em seguida um exemplo:

    OrderID;ProductID;UnitPrice;Quantity;Discount
    1;31;10;20;0
    9;16;13,9;40;0,15000001
    25;17;31,2;70;5,0000001E-2

    Ao correr a task que faz o bulk obtenho este erro:

    [Bulk Insert Task] Error: An error occurred with the following error message: "Cannot fetch a row from OLE DB provider "BULK" for linked server "(null)".The OLE DB provider "BULK" for linked server "(null)" reported an error. The provider did not give any information about the error.Cannot bulk load because the maximum number of errors (10) was exceeded.Bulk load data conversion error (type mismatch or invalid character for the specified codepage) for row 3, column 5 (Discount). (...)

    Penso que isto esteja relacionado com o "codepage" e "localeid" definidos. Já tentei algumas combinações e o erro persistiu. Possivelmente já estou há demasiado tempo a olhar para o mesmo erro.. :)   Podem dar-me uma ajuda se faz favor?

    sábado, 14 de janeiro de 2012 12:54

Respostas

  • Vitor,

    Por padrão o Codepage utilizado no SQL Server é o 850 em relação a Localização e Idioma normalmente são o Inglês.

    Agora, você já tentou realizar uma pequeno tratamento destes dados antes de enviar para o SQL Server?

    Você esta utilizando o comando Bulk Insert ou esta fazendo isso através do SSIS?


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
    domingo, 15 de janeiro de 2012 10:34
    Moderador
  • Vitor,

    Vale ressaltar também que a faixa de valores que você pode estar tentando enviar para o SQL Server o datatype Real pode não esta conseguindo reconhecer, uma possibilidade seria utilizar os Datatypes Float, Numeric ou Decimal.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
    domingo, 15 de janeiro de 2012 10:37
    Moderador

Todas as Respostas

  • Vitor,

    Por padrão o Codepage utilizado no SQL Server é o 850 em relação a Localização e Idioma normalmente são o Inglês.

    Agora, você já tentou realizar uma pequeno tratamento destes dados antes de enviar para o SQL Server?

    Você esta utilizando o comando Bulk Insert ou esta fazendo isso através do SSIS?


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
    domingo, 15 de janeiro de 2012 10:34
    Moderador
  • Vitor,

    Vale ressaltar também que a faixa de valores que você pode estar tentando enviar para o SQL Server o datatype Real pode não esta conseguindo reconhecer, uma possibilidade seria utilizar os Datatypes Float, Numeric ou Decimal.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
    domingo, 15 de janeiro de 2012 10:37
    Moderador