Usuário com melhor resposta
DUPLICIDADE DE DADOS SSIS

Pergunta
-
Boa tarde amigos,
estou estudando os recursos de BI SQL SERVER 2008 e me surgiu uma duvida usando o SSIS na hora da carga de dados da origem p/ destino ele duplica os registros nas tabelas de acordo com a quantidade de vezes que inicio a carga...oq eu preciso saber é como faço pra ele não duplicar os registros e apenas atualizar?
grato.
Tiago solon - aprendedo SQL.
- Editado Tiago Solon segunda-feira, 13 de maio de 2013 19:03
Respostas
-
Boa Tarde Tiago,
Nesse caso você teria que usar outro componente, por exemplo o Execute SQL Task
No exemplo abaixo, primeiro eu atualizo os dados e dois só insiro o que for novo.
Abs
- Editado Bruno_v3 segunda-feira, 13 de maio de 2013 20:51 Redundancia.
- Sugerido como Resposta Eduardo Gomes Pereira terça-feira, 14 de maio de 2013 13:50
- Marcado como Resposta Tiago Solon terça-feira, 14 de maio de 2013 13:53
-
Tiago, excelente dica do Bruno! Apenas complementando, o que vai restringir o dataflow a inserir somente os novos dados é o T-SQL previamente definido no OLEDB Source que fica dentro do dataflow citado pelo Bruno.
Seria legal se o Bruno postasse um exemplo de código T-SQL que faz essa checagem antes de inserir ( clausula NOT EXISTS)
Adcionalmente, vc pode utilizar o Lookup transformation. Este componente possui dois fluxos: Match (registros encontrados na tabela de destino, baseado numa chave configurada no componente) e NonMatch (registros não encontratos na tabela de destino, baseado numa chave). No seu caso vc vai usar a "perna" do fluxo nonMatch.
Veja este artigo: https://www.simple-talk.com/sql/ssis/implementing-lookup-logic-in-sql-server-integration-services/
Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp
- Marcado como Resposta Tiago Solon terça-feira, 14 de maio de 2013 13:53
Todas as Respostas
-
Boa Tarde Tiago,
Nesse caso você teria que usar outro componente, por exemplo o Execute SQL Task
No exemplo abaixo, primeiro eu atualizo os dados e dois só insiro o que for novo.
Abs
- Editado Bruno_v3 segunda-feira, 13 de maio de 2013 20:51 Redundancia.
- Sugerido como Resposta Eduardo Gomes Pereira terça-feira, 14 de maio de 2013 13:50
- Marcado como Resposta Tiago Solon terça-feira, 14 de maio de 2013 13:53
-
Tiago, excelente dica do Bruno! Apenas complementando, o que vai restringir o dataflow a inserir somente os novos dados é o T-SQL previamente definido no OLEDB Source que fica dentro do dataflow citado pelo Bruno.
Seria legal se o Bruno postasse um exemplo de código T-SQL que faz essa checagem antes de inserir ( clausula NOT EXISTS)
Adcionalmente, vc pode utilizar o Lookup transformation. Este componente possui dois fluxos: Match (registros encontrados na tabela de destino, baseado numa chave configurada no componente) e NonMatch (registros não encontratos na tabela de destino, baseado numa chave). No seu caso vc vai usar a "perna" do fluxo nonMatch.
Veja este artigo: https://www.simple-talk.com/sql/ssis/implementing-lookup-logic-in-sql-server-integration-services/
Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp
- Marcado como Resposta Tiago Solon terça-feira, 14 de maio de 2013 13:53
-
-
Complementando o que o Eduardo falou, você pode usar o comando Merge do T-SQL
http://msdn.microsoft.com/pt-br/library/bb510625(v=sql.105).aspx
Com grandes massas de dados, o merge apresenta uma melhor performance do que fazer um insert e depois um update, além de outras funções que ele propoem