Ir para conteúdo

Arquivado

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

Ramos_ML

Seleção dinâmica da TABELA destino (Split?)

Recommended Posts

Tenho em uma tabela apenas 2 colunas: ID e LINHA. O primeiro é um sequencial apenas para ordem de leitura e o segundo possui a informação, digamos, completa!


Em LINHA está a informação de um EFD Contribuição, ou seja, há diversos campos ali separados por PIPE e cuja tabela REAL de destino está logo nos primeiros caracteres, exemplo:


|0200|00000001|NOME DO PRODUTO 1|||UN|00|12345678||||18|


Neste caso, a tabela destino é TAB_0200 e já foi construída para receber tais campos. Preciso portanto, passar essa linha como argumento e popular a tabela destino... parece fácil, mas estou com muitas dificuldades.


Estou tentando através de uma função SPLIT e a linha de comando abaixo ainda não resolveu meu problema:


INSERT INTO TAB_0200 SELECT * from dbo.FnSplit(@LINHA, '|')


Bom, não quero influenciar ninguém na solução, então se tiverem outra solução disponível (sem SPLIT), agradeço antecipadamente pela ajuda.



Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala Ramos! tranquilo?

 

Dê uma olhada nesse tópico aqui... Se tiver dificuldades entre em contato que resolvemos essa treta.

 

http://forum.imasters.com.br/topic/544374-carga-de-tabela-dependendo-do-registro-lido-tem-como/

 

Abraço!

Diémerson

Skype: diemerson.campos

Hangouts/Email: diemerson.campos@gmail.com

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tranquilo Diemerson...

 

Sim, o tópico anterior também era meu :P mas não vi a resposta lá... (?)

 

São três etapas:

1) Leitura do TXT para uma TABELA TEMPOR (OK)

2) A leitura dessa tabela linha a linha (feito pelo loop com fetch next, OK)

3) E a gravação de cada linha na tabela destino (que é a questão atual, ainda sem solução)

 

Agradeço qualquer ajuda nesse sentido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala Ramos! tranquilo?

 

Pra não ter dado certo, a função de split que usou deve ter jogado os valores como linhas da mesma coluna, fiz uma com pivot, teste ai (to criando no tempdb, caso você tenha alguma com esse nome, mas crie no seu banco).

 

Como não da pra fazer um exec dentro da função pra fazer um pivot dinamico, fiz um retorno de uma tabelinha com 10 colunas pré definidas, se precisar de mais, ta fácil alterar.

 

Abraço!

 

 

use tempdb
go
if object_id('FN_SplitColunas') is not null
drop function dbo.FN_SplitColunas
go
create function dbo.FN_SplitColunas (@linha varchar(8000),@separador char(1))
returns
@tabela table
(
Coluna1 varchar(500),
Coluna2 varchar(500),
Coluna3 varchar(500),
Coluna4 varchar(500),
Coluna5 varchar(500),
Coluna6 varchar(500),
Coluna7 varchar(500),
Coluna8 varchar(500),
Coluna9 varchar(500),
Coluna10 varchar(500)
)
as
begin
declare @string varchar(500)
declare @result table (Id int identity, Texto varchar(500))
while charindex(@separador, @linha) > 0
begin
select
@string = ltrim(rtrim(left(@linha,charindex(@separador,@linha)-1)))
,@linha = substring(@linha,charindex(@separador,@linha)+1,len(@linha))
if len(@string) > 0
insert into @result select @string
else insert into @result values (null)
end
if len(@linha) > 0
insert into @result select @linha
else insert into @result values (null)
insert into @tabela
select
*
from @result
pivot(max(texto) for id in ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10])) pvt
return
end
go
select * from dbo.FN_SplitColunas ('r2d2|||c3po||bb8|','|')
select * from dbo.FN_SplitColunas ('NOME DO PRODUTO 1|||UN|00|12345678||||18|','|')

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.