none
Migrando do Excel para SQL2008 campo varchar é gravado com ponto flutuante RRS feed

  • Pergunta

  • SQL2008 Standard R2  -  Excel2007

    Ao executar a instrução abaixo a coluna CLASS_FISCAL da planilha é migrada para a tabela Produtos (campo homonimo) com ponto flutuante, mas o que não entendo é que na tabela o campo está como VARCHAR(20) e na planilha a coluna está formatada como Texto. 

    Ex: na planilha a coluna está preenchida como 27101130, mas na tabela o campo é gravado com 2.71011e+007 (mesmo sendo Varchar !).  Se formatar a referida coluna no Excel como Geral, Numérico, ou mesmo Personalizado, o erro persiste.

    Como isso é possível ?

    Instrução:

    update P set
    P.CLASSIFICACAO_FISCAL =  P_EXCEL.CLASS_FISCAL from Produtos P inner join
    (select * from OPENROWSET('Microsoft.Jet.OLEDB.4.0','Excel 8.0;Database=D:\ATUALIZACAO_CF.XLS', 
    'select CODIGO_PRODUTO, DESCRICAO, CLASS_FISCAL from [PLAN1$]')) P_EXCEL ON
    P.CODIGO_PRODUTO = P_EXCEL.CODIGO_PRODUTO

    notas:

    -Já experimentei colocar '....SUBSTRING(CLASS_FISCAL,1,8) from [PLAN1$]' mas a instrução dá erro, porém o interpretador não consegue relatar qual erro.   Também já experimentei colocar 'select * from [PLAN1$]' mas o erro do pto flutuante persiste.

    Muito obrigado pela atenção

    quinta-feira, 21 de junho de 2012 14:53

Respostas

  • Olá Heloisa,

    Consegui resolver, mas de uma forma mais complicada usando a sugestão do Eduardo, e levando em consideração o tempo curto que eu tinha p/isso.

    Fiz assim:

    Montei toda instrução no Excel (fiz na primeira linha (inserindo/editando colunas) e depois copiei para as outras linhas). Depois copiei tudo e colei no SQL (ManagementStudio), editei alguns detalhes no próprio SQL (CTRL+H) e rodei a instrução.  Funcionou.

    Muito obrigado pelo retorno !!!

    Dival

    • Marcado como Resposta Heloisa Pires terça-feira, 17 de julho de 2012 16:43
    terça-feira, 17 de julho de 2012 15:21

Todas as Respostas

  • Dival, bom dia.

    Acrescente um apóstrofe (') antes no número na planilha excel. Desta forma vc forcará o excel a interpretar este campo como um campo texto e consequentemente na importação o SQL reconhecerá este campo como um nvarchar.

    Abs.


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

    • Sugerido como Resposta Heloisa Pires quarta-feira, 4 de julho de 2012 12:07
    sexta-feira, 22 de junho de 2012 12:46
  • Dival,

    No Select você chegou a utilizar o comando Convert para forçar a conversão dos valores?


    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]

    sexta-feira, 22 de junho de 2012 15:44
  • Olá Dival,

    Conseguiu resolver a sua questão?


    Heloisa Pires | LATAM Forum Support Engineer | Microsoft Corporation

    sexta-feira, 6 de julho de 2012 15:40
  • Olá Heloisa,

    Consegui resolver, mas de uma forma mais complicada usando a sugestão do Eduardo, e levando em consideração o tempo curto que eu tinha p/isso.

    Fiz assim:

    Montei toda instrução no Excel (fiz na primeira linha (inserindo/editando colunas) e depois copiei para as outras linhas). Depois copiei tudo e colei no SQL (ManagementStudio), editei alguns detalhes no próprio SQL (CTRL+H) e rodei a instrução.  Funcionou.

    Muito obrigado pelo retorno !!!

    Dival

    • Marcado como Resposta Heloisa Pires terça-feira, 17 de julho de 2012 16:43
    terça-feira, 17 de julho de 2012 15:21