Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Julie Von Schön

[Resolvido] Procedure SQL + Bulk Insert

Recommended Posts

Bom Dia, precisamos de uma ajuda com isso, seguinte, tenho um programa que eu tenho gera os dados em formato TXT,

 

um exemplo:

TABELA=ECIDADESIGLACIDDESCRCIDSIGLAESTADOSIGLAPAISDDDPERCISSPERCIRNF

AJUARACAJUSEBRA790

AMSAMSTERDAM HOL0

ARRARRAIALBABRA7300

AVRAVEIRO POR00

BCNBARCELONA ESP0

BERBERLIN ALE0

BHZBELO HORIZONTEMGBRA310

BPSPORTO SEGUROBABRA730

TABELA=EESTADOSIGLAESTADOSIGLAPAISDESCRESTADO

ALBRAAlagoas

BABRABahia

BUAGTBUENOS AIRES

CEBRACeará

CHCHIChile

CTESPCATALONIA

DFBRADistrito Federal

FLEUAFlórida

GOBRAGoiás

MABRAMaranhão

 

Onde o que esta escrito em bold são:

o nome da tabela que é ex:

TABELA=EESTADO

E o que vem na frente são as colunas da tabela que são separadas pelo símbolo:

e sem o bold, separado por são os dados das tabela acima.

Gostaria de saber como criar um Procedure que abre o arquivo txt, e gera na hora a tabela e insere os dados, mesmo que sempre ele fique excluindo e recriando as mesmas tabelas.

 

Se alguém não entendeu pode adicionar:

MSNs: juliematthewsaff@hotmail.com ou steffany_hansen@hotmail.com

Chat do Gmail: julie.von.schon@googlemail.com ou steffanyhansen@gmail.com

 

Muito grata!!

 

Julie e Steff

Compartilhar este post


Link para o post
Compartilhar em outros sites

Julie Von Schön, kal a versao do SQL? Pode-se utilizar o Intergration Service ou tem que ser proc msm?

 

 

Abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

é em SQL Server 2008, pode ser de qualquer forma, contato que eu consiga fazer estas conversões gerando uma tabela com os dados, eu dei a idéia de Procedure + Bulk Insert pois achei que poderia ser mais facil, rs

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu tinha um problema parecido e fiz com o integration service.

Porem, seus dados nao tem delimitadores correto? tem tamanho fixo?

 

tente comecar por aki:

http://msdn.microsoft.com/pt-br/library/ms141134.aspx

Compartilhar este post


Link para o post
Compartilhar em outros sites

O unico que tem é aquela flechinha, mas posso altera-la para qualquer outro, o problema que eu não consigo é fazer ele entender as separações conforme eu expliquei

Compartilhar este post


Link para o post
Compartilhar em outros sites

RESOLVIDO

O Junior(jus2ka), me ajudou com este problema, vou compartilhar com vocês.

 

A linha da tabela: TABELA=ECIDADESIGLACIDDESCRCIDSIGLAESTADOSIGLAPAISDDDPERCISSPERCIRNF

A linha dos Dados:

AJUARACAJUSEBRA790

AMSAMSTERDAM HOL0

ARRARRAIALBABRA7300

AVRAVEIRO POR00

BCNBARCELONA ESP0

BERBERLIN ALE0

BHZBELO HORIZONTEMGBRA310

BPSPORTO SEGUROBABRA730

 

Na linha da Tabela: Separei e Criei os campos da Tabela com as entradas desejadas

Na linha de dados da tabel: Substitui os caracteres especiais por |

 

Meu arquivo que se chama 1.txt que possuem dos dados da primeira tabela, ficou assim:

|AJU|ARACAJU|SE|BRA|79|0||

|AMS|AMSTERDAM| |HOL||0||

|ARR|ARRAIAL|BA|BRA|73|0|0|

|AVR|AVEIRO| |POR||0|0|

|BCN|BARCELONA| |ESP||0||

|BER|BERLIN| |ALE||0||

|BHZ|BELO HORIZONTE|MG|BRA|31|0||

|BPS|PORTO SEGURO|BA|BRA|73|0||

 

No início do código que vai gerar a tabela, foi colocado:

CAMPO_DELETAR VARCHAR(4000)

Gera um campo que logo será excluído, apenas para evitar que seja retirado na mão todos os caracteres | presentes no início de cada linha

 

No final do código foi colocado:

ALTER TABLE TABELA_ECIDADE DROP COLUMN CAMPO_DELETAR

Deleta a coluna CAMPO_DELETAR que foi gerada para armazenar temporareamente o | que era o primeiro caractere da linha

 

UPDATE TABELA_ECIDADE SET PERCIRNF = REPLACE (PERCIRNF,'|','')

Este código acima vai se encarregar de remover o | da coluna PERCIRNF (última coluna) que no TXT ele usa como terminação, isto também para evitar (conforme no início) de ser retirado na mão.

 

Segue o código completo:

DECLARE @ARQUIVO VARCHAR(50)
DECLARE @EXTENSAO VARCHAR(4)

SET @EXTENSAO = '.TXT'
-- ALTERA SEMPRE QUE FOR SUBIR NOVO ARQUIVO

SET @ARQUIVO = '1'+@EXTENSAO

-- SELECT @ARQUIVO

IF @ARQUIVO = '1.TXT'
BEGIN
IF EXISTS (SELECT * FROM SYS.SYSOBJECTS WHERE NAME = 'TABELA_ECIDADE' AND XTYPE = 'U')
	DROP TABLE TABELA_ECIDADE

	CREATE TABLE TABELA_ECIDADE ( -- ECIDADE VARCHAR(4000), 
	CAMPO_DELETAR VARCHAR(4000), 
	SIGLACID VARCHAR(4000), 
	DESCRCID VARCHAR(4000), 
	SIGLAESTADO VARCHAR(4000), 
	SIGLAPAIS VARCHAR(4000), 
	DDD VARCHAR(4000), 
	PERCISS VARCHAR(4000), 
	PERCIRNF VARCHAR(4000))

	
--IMPORTANDO O ARQUIVO TXT PARA A TABELA, USANDO "|" COMO SEPARADOR.
BULK INSERT TABELA_ECIDADE
FROM 'C:\IMPORT\1.TXT'
WITH(FIELDTERMINATOR = '|')

ALTER TABLE TABELA_ECIDADE DROP COLUMN CAMPO_DELETAR
UPDATE TABELA_ECIDADE SET PERCIRNF = REPLACE (PERCIRNF,'|','')

END

Espero que tenham entendido.

 

Julie

Compartilhar este post


Link para o post
Compartilhar em outros sites

Apenas um adendo ao código:

 

No Bulk Insert apenas coloquei CODEPAGE = 'ACP' para resolver o problema de acentuação que descobri a pouco.

 

Ex:

BULK INSERT TABELA_EESTADO

FROM 'C:\IMPORT\2.TXT'

WITH(CODEPAGE = 'ACP', FIELDTERMINATOR = '|')

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.