SET XACT_ABORT é o que podemos dizer de um das jóias escondidas. Ela é útil em muitos aspectos.
Deixe-me explicar com um exemplo, suponha que você está trabalhando em um procedimento armazenado, que está fazendo uma manipulação de dados complexos. Você espera que esta consulta que seja executada em 1 minuto, quando você executá-la a partir do código .NET ou outra, mas ao testa-la percebe que demorou bastante tempo e a consulta levantou um tempo limite de comando.
Ou podemos dizer que sua transação aplicada no procedimento armazenado e chamando a partir do código .NET também acionou o tempo limite de comando no programa ADO.NET .NET . Levantou um tempo limite, mas ainda a sua consulta está sendo executado em segundo plano.
Agora, em tal situação, por vezes, isso aconteceu a transação que está sendo executado no SQL SERVER acaba se tornando uma transação aberta, o que pode ser causa de problema de bloqueio.
Em tal situação opção XACT_ABORT é útil.
Por padrão opção XACT_ABORT está desabilitado. Podemos mudar com a seguinte declaração:
SET XACT_ABORT ON;
Agora, quando esta declaração está habilitada e se você enfrentar mesma situação, como mencionado acima, será revertido todo o lote.
Deixe-me explicar com exemplo a seguir
Suponha que eu escrevi seguinte declaração “XACT ABORT é OFF”
Agora, quando eu executar as declarações acima vou conseguir seguinte resultado:
E na janela de mensagem encontraremos o seguinte resultado:
O que isso significa que, em vez de o erro, pelo menos, três registros são inseridos, mas às vezes é necessário ter todos ou nenhum registro comitado na tabela.
Em seguida, deixe-me ative a opção XACT_ABORT ON na consulta
Agora, deixe-me re executar as instruções novamente. Quando eu executo as afirmações acima eu tenho seguinte resultado na guia mensagem:
Isso significa que ele fez rollback na transação assim que obteve o erro, sendo assim não inserindo os registros.
Embora o exemplo acima não é o melhor exemplo de xact_abort mas vai ajudar a entender como usá-lo.
Obrigado
Deixe um comentário