Inquiridor
Como importar arquivos txt para uma tabela no sql server 2005

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......
Todas as Respostas
-
-
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.
-
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... -
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!!! -
-
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 -
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. -
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.
-
Veja se isso ajuda:
CREATETABLE 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!