none
DUPLICIDADE DE DADOS SSIS RRS feed

  • 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
    segunda-feira, 13 de maio de 2013 18:54

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
    segunda-feira, 13 de maio de 2013 20:50
  • 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/

    Abs.


    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
    terça-feira, 14 de maio de 2013 13:50

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
    segunda-feira, 13 de maio de 2013 20:50
  • 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/

    Abs.


    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
    terça-feira, 14 de maio de 2013 13:50
  • blz galera obrigado pela ajuda.....Eduardo vou estudar o post que vc enviou e posto aqui a conclusão....ou novas duvidas!


    Tiago solon - aprendedo SQL.

    terça-feira, 14 de maio de 2013 13:59
  • 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

    quarta-feira, 15 de maio de 2013 18:55