Ir para conteúdo

Arquivado

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

gRoOvE

Instruções complexas com MERGE

Recommended Posts

Bom dia, estou realizando a inserção em uma tabela devido a uma ETL, porém quando vou realizar a inserção de dados preciso realizar vários JOIN para conseguir o dado tratado, tem alguma forma de usar variáveis ou de deixar o código mais legível?

Segue um exemplo:

MERGE livraria_bi.dbo.livro AS T 	
USING livraria.dbo.livro AS S 	ON (T.liv_codigo = S.cod_livro) 	
WHEN NOT MATCHED BY TARGET 		THEN 
INSERT (liv_codigo, liv_titulo, liv_autor, liv_genero) 		
VALUES (S.cod_livro, S.titulo, 	(SELECT nome_autor FROM livraria.dbo.autor WHERE cod_autor = S.cod_autor), (SELECT nome_genero FROM livraria.dbo.genero WHERE cod_genero = S.cod_genero)); 

Obs.:Não consegui identar o código "/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, não sei se entendi corretamente o seu problema, mas, isso não pode ser resolvido com INSERT SELECT?

 

Segue exemplo:

 

INSERT (liv_codigo, liv_titulo, liv_autor, liv_genero) 
SELECT L.cod_livro, L.titulo, A.nome_autor, G.nome_genero 
FROM livraria.dbo.livro AS L
INNER JOIN livraria.dbo.autor AS A ON L.cod_autor = A.cod_autor
INNER JOIN livraria.dbo.genero AS G ON L.cod_genero = G.cod_genero
WHERE L.cod_livro NOT IN 
   	(SELECT liv_codigo FROM livraria_bi.dbo.livro GROUP BY liv_codigo)

 

Não sei se era exatamente isso que você queria, mas acredito que o resultado atingido seria o mesmo, com um código mais fácil de ler e de melhor performance.

 

Espero ter ajudado. :)

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.