SQL Server 2005 recém intoduced o caminho para reverter as transações no SQL Server 2005
SET XACT_ABORT ON
XACT_ABORT quando está no. As instruções T-SQL automaticamente a reversão da operação quando o erro ocorreu em declarações.
SET XACT_ABORT ON
USO Emp
Begin Tran
Insira EmpInfo Valores(1)
Insira EmpInfo Valores(1) — Esta declaração irá aumentar o erro de chave primária
Insira EmpInfo Valores(2)
Commit Tran
A primeira linha de comando seja executado sem erros. O erro de chave primária irá aumentar em segunda linha. Mas a transação bloco inteiro não será comprometida, porque o XACT_ABORT dentro em.
Você deve observar que XACT_ABORT encerra o lote atual * *, não o comando inteiro. Os lotes são separados com a palavra-GO. Execução continuará no início do próximo lote.
Esse recurso também está no SQL Server 2000, embora ele se comporta de forma ligeiramente diferente para vários erros.
Em SQL 2000, há casos em que não XACT_ABORT para reverter a transação automaticamente.
Por exemplo:
Inserindo em um nome de coluna inválido.
Inserindo uma chave primária com IDENTITY_INSERT OFF.
Execução de um SELECT que usa uma UDF inexistente.
Estes tipos de erros são geralmente devido a um comando mal autor, para que não ocorrem na operação do dia-a-dia do seu programa a menos que alguém altere o esquema. Mas conta para a sua possibilidade quando de autoria scripts atualização de dados ao implementar uma nova versão de um projeto, apenas no caso de implantação não saem como planejado.
Há maneiras de lidar com estes erros. Seu COMMIT deve estar no lote realização do DML. Depois que o grupo (após a palavra GO) você pode verificar o TRANCOUNT @ @ para ver se ele é maior que zero e agir em conformidade. Normalmente, a transação ROLLBACK.
As transações podem lotes span, assim você pode executar uma reversão em um lote subseqüente.