Inquiridor
Controle de transação dentro do Data Flow Task

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á!
Todas as Respostas
-
-
-
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] -
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.
-
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]