none
Lendo arquivo txt por openrowset RRS feed

  • Pergunta

  • Estou lendo um arquivo texto via openrowset. O arquivo txt é separado por ;. Porém, o sql está considerando a primeira linha do arquivo como coluna. Dessa forma não consgio ler a primeira linha. Como posso arrumar isso? (segue código)

    SELECT * FROM OPENROWSET
    ('MSDASQL',
    'Driver={Microsoft Text Driver (*.txt; *.csv)};
    DefaultDir=C:\;Extended properties="ColNameHeader=True;Format=Delimited;"',
    'SELECT * FROM arquivo.TXT')

    Obrigado

    segunda-feira, 30 de janeiro de 2012 14:25

Respostas

  • Rafa, pelo que pesquisei, pra fazer isso você vai precisar de um arquivo de configuração.
    Consegui fazer um exemplo que funciona, veja só:
    
    
    /*********************************
    Arquivo txt montado para exemplo (salvar no diretório C:\teste com o nome de arquivo.txt)
    *********************************/
    0;teste
    1;weslley
    
    
    /*********************************
    Arquivo de configuração para exemplo (salvar no diretório C:\teste com o nome de Schema.ini)
    *********************************/
    [arquivo.txt]
    Format=Delimited(;)
    ColNameHeader=false
    ColNameHeader=False
    Col1=id Text
    Col2=nome Text
    
    /*********************************
    Query para buscar os dados do arquivo
    *********************************/
    SELECT * FROM OPENROWSET
    ('MSDASQL',
    'Driver={Microsoft Text Driver (*.txt; *.csv)};
    DefaultDir=C:\teste;',
    'SELECT * FROM arquivo.txt')


    Abraços, Weslley Moura MCP - MCTS - ORA SqlExpert
    • Sugerido como Resposta Weslley Moura segunda-feira, 30 de janeiro de 2012 18:38
    • Marcado como Resposta Harley Araujo quarta-feira, 1 de fevereiro de 2012 13:26
    segunda-feira, 30 de janeiro de 2012 16:01
  • Esqueci de mencionar...segue link do MSDN que fala sobre as propriedades que você pode usar no arquivo .INI.

    http://msdn.microsoft.com/en-us/library/windows/desktop/ms709353%28v=vs.85%29.aspx


    Abraços, Weslley Moura MCP - MCTS - ORA SqlExpert
    • Marcado como Resposta Harley Araujo quarta-feira, 1 de fevereiro de 2012 13:26
    segunda-feira, 30 de janeiro de 2012 16:03
  • Dá sim...siga o modelo abaixo:

    Col1=Nome Text Width 50

     


    Abraços, Weslley Moura MCP - MCTS - ORA SqlExpert
    • Marcado como Resposta Harley Araujo quarta-feira, 1 de fevereiro de 2012 13:26
    segunda-feira, 30 de janeiro de 2012 17:47

Todas as Respostas

  • Rafa,

     

    Tente assim:

     

    SELECT * FROM OPENROWSET
    ('MSDASQL',
    'Driver={Microsoft Text Driver (*.txt; *.csv)};
    DefaultDir=C:\;Extended properties="ColNameHeader=True;Format=Delimited;HDR=NO"',
    'SELECT * FROM arquivo.TXT')


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    segunda-feira, 30 de janeiro de 2012 15:35
    Moderador
  • Rafa, pelo que pesquisei, pra fazer isso você vai precisar de um arquivo de configuração.
    Consegui fazer um exemplo que funciona, veja só:
    
    
    /*********************************
    Arquivo txt montado para exemplo (salvar no diretório C:\teste com o nome de arquivo.txt)
    *********************************/
    0;teste
    1;weslley
    
    
    /*********************************
    Arquivo de configuração para exemplo (salvar no diretório C:\teste com o nome de Schema.ini)
    *********************************/
    [arquivo.txt]
    Format=Delimited(;)
    ColNameHeader=false
    ColNameHeader=False
    Col1=id Text
    Col2=nome Text
    
    /*********************************
    Query para buscar os dados do arquivo
    *********************************/
    SELECT * FROM OPENROWSET
    ('MSDASQL',
    'Driver={Microsoft Text Driver (*.txt; *.csv)};
    DefaultDir=C:\teste;',
    'SELECT * FROM arquivo.txt')


    Abraços, Weslley Moura MCP - MCTS - ORA SqlExpert
    • Sugerido como Resposta Weslley Moura segunda-feira, 30 de janeiro de 2012 18:38
    • Marcado como Resposta Harley Araujo quarta-feira, 1 de fevereiro de 2012 13:26
    segunda-feira, 30 de janeiro de 2012 16:01
  • Esqueci de mencionar...segue link do MSDN que fala sobre as propriedades que você pode usar no arquivo .INI.

    http://msdn.microsoft.com/en-us/library/windows/desktop/ms709353%28v=vs.85%29.aspx


    Abraços, Weslley Moura MCP - MCTS - ORA SqlExpert
    • Marcado como Resposta Harley Araujo quarta-feira, 1 de fevereiro de 2012 13:26
    segunda-feira, 30 de janeiro de 2012 16:03
  • não deu certo. ele ainda entende que a primeira linha são colunas. veja:

    40928 1,00039053783472 -3,59481998168931E-07

    ----------- ---------------------- ----------------------

    40929 1,00078122818924 -7,18683194289582E-07

    Colunas teria que estar com nome em branco e a primeira linha abaixo dos caracteres (----------- ---------------------- ----------------------).

     

     

    segunda-feira, 30 de janeiro de 2012 16:10
  • Pegando um pouco a ideia do Wesley, pq nao cria um format file: http://msdn.microsoft.com/pt-br/library/ms191516.aspx
    segunda-feira, 30 de janeiro de 2012 16:17
  • Rafa, mesmo o exemplo que te passei não funcionou? Fiz o teste novamente e funciona!

    Talvez seja interessante você montar este exemplo que postei (com dados de teste) e depois fazer uma comparação com o seu exemplo real...


    Abraços, Weslley Moura MCP - MCTS - ORA SqlExpert
    segunda-feira, 30 de janeiro de 2012 16:22
  • weslley deu certo sim.

    só uma coisa: no arquivo de configuração não é possível definir o tamanaho da coluna . Por exemplo: em vez de col1=id text, colocar col1=id varchar(50).

    Eu tentei e não rola.

    segunda-feira, 30 de janeiro de 2012 17:10
  • Dá sim...siga o modelo abaixo:

    Col1=Nome Text Width 50

     


    Abraços, Weslley Moura MCP - MCTS - ORA SqlExpert
    • Marcado como Resposta Harley Araujo quarta-feira, 1 de fevereiro de 2012 13:26
    segunda-feira, 30 de janeiro de 2012 17:47
  • blz. valeu

    segunda-feira, 30 de janeiro de 2012 18:13
  • E como eu defino um campo como tipo inteiro e numérico?
    sexta-feira, 3 de fevereiro de 2012 20:26
  • Tentei usar integer width 2 por exemplo e não deu certo.

    como seria?

    sexta-feira, 3 de fevereiro de 2012 20:41
  • consegui. é short.

    site de consulta com todos os tipos: http://www.macoratti.net/txt_arqs.htm

    sexta-feira, 3 de fevereiro de 2012 20:45