none
Controle de transação dentro do Data Flow Task RRS feed

  • Pergunta

  • Salve pessoal!

    Tenho uma dúvida quanto ao controle de transações do SSIS. EU tenho um Data Flow Task, e dentro dele eu tenho um source, um multicast e três inserts em três tabelas distintas, a partir do multicast.

    A minha necessidade é a seguinte: 

    Eu preciso que caso um registro falhe em algum dos inserts, o mesmo registro não seja inserido em mais nenhuma das outras duas tabelas, e o meu data flow prossiga com o restante dos registros.

    Caso ele não trate transações com essa granularidade, existe algum workaround?

     

    Agradeço desde já!

    sexta-feira, 23 de abril de 2010 12:07

Todas as Respostas

  • Carlos,

    Você deseja fazer um controle de transações?


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário]
    domingo, 25 de abril de 2010 01:15
    Moderador
  • Junior,

     

    Exato.

    terça-feira, 27 de abril de 2010 08:38
  • Carlos,

    Mas quais poderiam ser os motivos de falha no Insert?


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário]
    terça-feira, 27 de abril de 2010 19:07
    Moderador
  • Junior,

     

    Erros de tipos/tamanhos de dados, chave duplicada, inserir filho sem pai...etc. Na empresa temos muitas origens de diversos tipos, e é possível que eu encontre erros do tipo durante as cargas. Eu criei um componente customizado que loga esses erros numa tabela para a verificação dos logs durante o dia (A carga é executada à noite).

     

    A demanda é que sejam carregados os registros que estiverem OK, e falhe em todas as pai e filha algum que não estiver de acordo, e apenas estes.

    Eu criei um fluxo que faz mais ou menos o seguinte:

    Um begin tran no control flow, tento fazer as inserções, e jogo num txt todas as chaves que deram erro durante o processo, e no final eu tenho um rollback tran.

    Depois de ter todas as chaves que apresentaram algum tipo de erro no txt, eu faço a inserção fazendo lookup neste arquivo, e inserindo o que não der match.

    Eu achei esta a melhor forma, mesmo com o rollback e fazendo a operação duas vezes, o processo demorou apenas 5 minutos, e como está feito atualmente, em uma proc com cursores, demora mais de 4 horas.

     

    Se vc tiver alguma sugestão, será muito bem vinda.

     

    Um abraço.

    quarta-feira, 28 de abril de 2010 02:37
  • Carlos,

    Acredito que você pensei em uma estratégia muito inteligente, prática e simples!!!

    Realmente trabalhar com stored procedure da forma que você esta destacando a sua necessidade não seria uma boa solução.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário]
    quarta-feira, 28 de abril de 2010 17:34
    Moderador