none
Como importar arquivos txt para uma tabela no sql server 2005 RRS feed

  • Pergunta

  • Gostaria de saber como fazer para importar os dados de um arquivo de formato txt para o banco de dados do sql server, pois estou quebrando a cabeça e ñ estou conseguindo fazer.
    Tentei usar o BCP o BULK INSERT e o INSERT ...SELECT *  FROM  OPENROWSET(BULK ...

    ñ estou tendo bons resultados......
    quarta-feira, 28 de outubro de 2009 10:20

Todas as Respostas

  • Leonardo,

    As maneiras são as citadas por vc, e tem mais uma que é por SSI.
    Qual erro esta apresentando?


    Att.
    Marcelo Fernandes
    MCP, MCDBA, MCSA, MCTS. Se útil, classifique!!!
    quarta-feira, 28 de outubro de 2009 10:28
  • Marcelo,

    consegui em parte resolver o meu problema...

    Descobri que eu precisava fazer umas alteraçoes nos dados, entao fiz algumas manualmente e deu certo...

    mas eu preciso de descobrir agora como pode fazer isso automaticamente...

    por exemplo, eu usei este codigo:

    BULK INSERT Leonardo.dbo.COB1
    FROM 'C:\COB3.TXT'
    WITH (FIELDTERMINATOR = ';')

    so que eu preciso de indicar que as aspas "" indicam caracter e nao sao dados...
    como nesta linha do documento txt

    "0000027A";27;"SM";30,05;"E";;10/07/1997;"";"TBSB";"0042";"0148";"34";"1148100134";"CC";"";"";05/11/1996;10/07/1997;"LB";1;"";0,00;10/07/1997;5000,00

    nela as aspas indicam o caracter, o ponto-e-virgula o delimitador de campo.

    dá erro quando tem aspas, quando o campo de data esta somente com as barras, e quando no campo destinado a valores numericos aparece uma virgula delimitando os decimais....


    Caso voce saiba como eu posso colocar essas condiçoes no codigo sem que eu precise de alterar o documento txt eu ficaria muito grato.


    Desde já muito grato.

    Leonardo Bandeira.


    quarta-feira, 28 de outubro de 2009 10:59
  • Eu gostaria de pedir algo mais.....

    gostaria de saber, também,  como fazer para exportar dados sem usar o recurso das tasks mas sim por linhas de comando, codigo sql...

    exportando para txt ou mdb.....


    e peço que ñ somente digam o recurso, mas, se possivel, explicar um pouco, pois ainda sou iniciante no assunto...
    quarta-feira, 28 de outubro de 2009 12:22
  • Leonardo,

    consegui de uma maneira mas acredito que deve haver maneira melhor (estou pesquisando) segue maneira q consegui.

    create table #teste (campo1 varchar(15),campo2 int, campo3 char(4), campo4 char(10), campo5 char(10))
    go
    
    BULK INSERT #teste 
    FROM 'C:\COB3.TXT' 
    WITH (FIELDTERMINATOR = ';')
    
    go
    select replace(campo1,'"',''),campo2,replace(campo3,'"',''),replace(campo4,',','.'),replace(campo5,',','.') from #teste
    go
    drop table #teste
    
    --arquito .txt
    --"0000027A";27;"SM";30,05;5000,00
    
    



    Att.
    Marcelo Fernandes
    MCP, MCDBA, MCSA, MCTS. Se útil, classifique!!!
    quarta-feira, 28 de outubro de 2009 12:27
  • Marcelo,

    dá para se perceber que nem tudo esta perdido,
    mas imagino que deve ter algum comando que indique as opçoes que eu desejo...

    com o comando BCP talvez haja algo... mas com ele eu ainda ñ tive bons resultados....


    quarta-feira, 28 de outubro de 2009 12:51
  • Olá Leonardo Bandeira,

    Se você pretende pegar os dados de uma base de dados como, por exemplo, de uma entidade e exporta o mesmo para outro tipo de arquivo como por exemplo .txt.

    Basta você abri o prompt de comando e digite o seguinte código.

    SQLCMD
    USE NomeBancoDeDados
    GO
    :OUT C:\Pasta\nomedoarquivo.txt
    SELECT * FROM NomeTabela
    GO

    Depois disso seus dados terá sido exportado para o formato .txt.

    Caso tenha lhe ajudado não se esqueça de marca como útil, só assim ajudará a melhorar a qualidade do fórum.

    Heberton Melo
    MCP | MCTS em SQL Server 2008 | Projetista de Dados

    Blog: http://heberton-melo.spaces.live.com


    quinta-feira, 29 de outubro de 2009 02:59
  • HEBERTON,

    AGRADEÇO MUITO A SUA AJUDA. PERGUNTO SE VOCE SABERIA RESPONDER-ME COMO EU PODERIA FAZER PARA SOLUCIONAR OS PROBLEMAS, CITADOS ACIMA,
    A PROPOSITO DA IMPORTAÇAO DE ARQUIVOS TXT PARA O BANCO, O QUE PARA MIM É DE GRANDE IMPORTANCIA NESTE MOMENTO...

    COMO SE VÊ, O NOSSO AMIGO MARCELO JA APRESENTOU UMA BOA SOLUÇAO, MAS EU IMAGINO QUE HAJA UM MEIO DE IMPORTAÇAO NA QUAL Ñ SEJA PRECISO FAZER TANTOS AJEITES, POIS EU PRECISO IMPORTAR, FREQUENTEMENTE DIVERSOS ARQUIVOS TXT PARA O SQL SERVER..

    TAMBEM PERGUNTO SE ALGUEM SABERIA COMO FAZER PARA IMPORTAR DIVERSOS ARUIVOS AO MESMO TEMPO, POR EXEMPLO, PODER INDICAR UM DIRETORIO, E TODOS OS ARQUIVOS QUE LA ESTIVESSEM FOSSEM IMPORTADOS..



    DESDE JA AGRADEÇO MUITO A COLABORAÇAO DE TODOS.


    ATT.

    LEONARDO BANDEIRA.
    quinta-feira, 29 de outubro de 2009 08:55


  • Por exemplo, estou tendo problemas na importaçao para esta tabela:
    CREATE TABLE [Leonardo].[dbo].[COB] (
    [codcobro] nvarchar(8),
    [num] int,
    [stat] nvarchar(2),
    [valor] float,
    [moneda] nvarchar(1),
    [f_ini] datetime,
    [f_fin] datetime,
    [csu] nvarchar(3),
    [claveemis] nvarchar(4),
    [nbco] nvarchar(4),
    [nag] nvarchar(4),
    [dc] nvarchar(2),
    [ncuenta] nvarchar(10),
    [dest] nvarchar(2),
    [enviar] nvarchar(6),
    [titular] nvarchar(40),
    [fentrada] datetime,
    [factualiz] datetime,
    [usr] nvarchar(2),
    [ntrans] int,
    [proxstat] nvarchar(2),
    [proxvalor] float,
    [proxf_ini] datetime,
    [valorpts] float
    )

    o arquivo txt que eu pego é retirado de uma base de dados do visual fox, formato dbf.
    há um programa que exporta as tabelas que eu desejo para o formato txt.
    Eu mantive as mesmas caracteristicas da tabela do fox gerando as tabelas no sql sever 2005.

    Como há valores determinados como float, data e nvarchar
    e os dados que eu recebo no arquivo txt vem desta forma:



    "0000027A";27;"SM";30,05;"E";/  /;10/07/1997;"";"TBSB";"0042";"0148";"34";"1148100134";"CC";"";"";05/11/1996;10/07/1997;"LB";1;"";0,00;/  /;5000,00


    Onde é nvarchar o dados vem entre aspas, os float vem com virgulas, e algumas datas vêm somente com as barras....


    por causa disso eu estou tendo muito problema e ña estou conseguindo fazer o que desejo.

    e como ainda sou iniciante no assunto, isso esta ficando cada vez mais complicado.


    Espero que alguem consiga me ajudar....


    Att.

    Leonardo Bandeira.






    quinta-feira, 29 de outubro de 2009 09:18
  • Veja se isso ajuda:



    CREATE

     

    TABLE IMPORT_DATA

    (

    COL001

    INT,

    COL002

    CHAR(10),

    COL003

    DATETIME

    );

    BULK

     

    INSERT NORTHWIND.DBO.IMPORT_DATA

    FROM

     

    'C:\TESTE.txt '

    WITH

    (

     

    FIELDTERMINATOR = ',',

     

    ROWTERMINATOR = '\n'

    )

    Bem eu consigo exportar apenas de uma tabela do SQL Server para um arquivo, agora o próprio arquivo eu conheço apenas pelo SSIS.

    Exportar de uma tabela para um arquivo:


    --EXPORTAR UMA CONSULTA PARA UM ARQUIVO TXT

    /*

    OPO: QUERY OUT SERVE PARA ESPECIFICAR A CONSULTA E DEVE SER SEGUIDA DO NOME DO ARQUIVO.

    OPO: -S INDICA O NOME DO SERVIDOR

    OPO: -U INDICO O USURIO

    OPO: -P INDICA A SENHA

    OPO: -t INDICA O SEPARADOR DE COLUNAS

    OPO: -r INDICA O SEPARADOR DE LINHAS

    OPO: -w INDICA QUE OS DADOS SERO IMPORTADOS EM UNICODE

    */

    EXEC

     

    MASTER.DBO.XP_CMDSHELL

    'bcp "SELECT * FROM NORTHWIND.DBO.ORDERS" queryout C:\Teste.txt -S localhost -U sa -P sqlserver -t , -r \n -w'

    Esprero ter colaborado, boa sorte!

     

    quinta-feira, 29 de outubro de 2009 17:40