IMPORTAR TXT PARA SQL SERVER

USUARIO.EXCLUIDOS 25/05/2005 17:53:36
#85230
Tudo bem pessoal ? Espero q sim...

Bom eu preciso fazer uma importação de um arquivo ".TXT" para o banco de dados em "SQL Server" quem puder me ajudar mandando alguma rotina ou até mesmo os comandos ficarei muito agradecido, abraços...

obs: os campos estaum no txt assim: "campo1","campo2","campo3"
USUARIO.EXCLUIDOS 25/05/2005 18:10:31
#85232
Resposta escolhida
Cara..usa o Bulk Insert do sql server.elee é bem mais rapido que o DTS e o BCP...
Numa procedure use este comando...Olhe no books on line pra pegar a sintaxe..se eu não me engano acho que a opção da sp_dboption 'select into/bulkcopy' tem que estar habilitada no seu banco tb...não me lembro.
Depois é só executar a proc...

Lembra tb que se por acaso vc estiver importando muitos dados do txt e seu banco estiver como recovery full ou bulk logged, seu transaction log vai ficar grande...seria interessante se vc tiver que importar txts muitos grandes, mudar esta opção (via comando na proc tb) para simple, não gerando transaction log (mesmo pq não a há necessidade de se ter log do que foi importado) e depois volte ele pro modo que estava..

Mas olhe no books on line por Bulk Insert....tem explicações e exmplos lá..



USUARIO.EXCLUIDOS 27/05/2005 09:59:54
#85430
Obrigado pela atenção Laerte, mas quais comandos devo usar, pois sou iniciante no visual basic !
USUARIO.EXCLUIDOS 27/05/2005 10:10:20
#85432
Vc quer fazer pelo Visual basic véio ?..isso que te passei é direto no SQL SERVER....
Pelo Visual basic e pelo DTS (NO SQL SERVER) vc tem a facilidade de Poder manipular as linhas logo na importação do TXT...(caso vc precise..ex....uma data que venha no TXT como ddmmyyyy e vc queira colocar como dd/mm/yyyy no sql server),e tem o contra de dependendo do tamanho do TXT ficar uma operação muito demorada se faito pelo VB.
Por este comando que te passei, que é do SQL SERVER, vc tem a rapidez de quase 3.000 linhas por segundo, mas não dá para se manipular o dado quando inserido e sim depois.
Vou te dar um exemplo...
Eu tenho um processo de importação de TXTÂÂÂ's que cada arquivo txt vem na média de 30 MB. é muito coisa....intaum eu tenho uma procedure em SQL SERVER que é startada por um programa em vb (um robozinho)..que fica lendo dterminado diretorio esperando que estes arquivos cheguem...Nesta Procedure eu uso o COmando BULK INSERT que me sobe este TXT muito rapido..mas como não consigo manipular o dado na hora da inserção na tabela, eu uso tabelas frias...Subo os dados pra tabelas frias..ou seja...os dados como estão no TXTpelo Bulk Insert...e depois faço um tratamento dos dados pelo DTS (SQL SERVER) para as Tabelas quentes. Mas tudo via SQL SERVER. Este processo que demorava na media de quase 1 hora pelo VB, inicialmente feito..hoje dura no máximo 7 minutos.
Acredito que vc queira fazer pelo VB não é ?...
Dá uma procurada aqui no site sobre importação de TXT...acho que irá encontrar uns exemplos aqui
USUARIO.EXCLUIDOS 27/05/2005 10:21:08
#85437
cara, olbrigado de novo pela atenção, mas infelismente é muito escasso esse tipo de informação tanto no vbmania quanto na internet ! [S51]
USUARIO.EXCLUIDOS 27/05/2005 10:22:12
#85438
Faz o seguinte....me adicona no msn e eu vou te dando umas dicas
laertejuniordba@hotmail.com
USUARIO.EXCLUIDOS 27/05/2005 10:34:16
#85443
ok
USUARIO.EXCLUIDOS 27/05/2005 10:39:11
#85445
Véio..um exemplo bem simples..digamos que vc tenha um TXT que venha assim :
0001|01/01/2005|23,5
0001|01/02/2005|24,5
0001|01/02/2005|25,5
0001|01/03/2005|26,5
0001|01/03/2005|27,5
0001|01/03/2005|28,5

onde o delimitador é o caracter | e os campos sejam
Codigo ( varchar),data (datetime) e Valor Numeric(18,2)

Dim Cn As ADODB.Connection
Set Cn = New ADODB.Connection

'aqui vc coloca sua string de conexao no sql server
Cn.ConnectionString = "Provider=SQLOLEDB.1;Password=winfood;Persist Security Info=True;User ID=winfood;Data Source=laerte"

Cn.Open
Dim fs As New FileSystemObject
Dim fsStream As TextStream

'aqui o caminho txt
Set fsStream = fs.OpenTextFile("c:    xt    este.txt")

Dim linha As Variant
Do While fsStream.AtEndOfStream = False
' aqui ele retira os campos da linha conforme o delimitador | e coloca na array linha
linha = Split(fsStream.ReadLine, "|")
sql = "set dateformat dmy insert into tabela(campo1,campo2,campo3) values ('" & linha(0) & "','" & linha(1) & "'," & replace(linha(2),",",".") & ")"
Cn.Execute sql
Loop
Set Cn = Nothing
set fs = nothing
set fsStream = nothing

Não se esqueça de Adicionar a referencia no VB Microsoft Script RunTime Library e o ADO.

Este exmplo é bem basico e feito em VB..qualquer coisa é só chamar
Tópico encerrado , respostas não são mais permitidas