Reversión de transacción en SQL Server 2005

SQL Server 2005 recentemente intoduced o camiño para reverter as operacións en SQL Server 2005

SET XACT_ABORT ON

cando está na XACT_ABORT. As instrucións T-SQL ha revertir automaticamente a transacción cando erro en declaracións.

SET XACT_ABORT ON

USE Emp
Comezar Tran
Inserir valores EmpInfo(1)
Inserir valores EmpInfo(1) — Esta declaración vai elevar o erro de chave primaria
Inserir valores EmpInfo(2)
Comprometa-Tran

A primeira liña de statment executarase sen erros. O erro de chave primaria aumentará en segunda liña. Pero toda a transacción bloque non será comprometida, porque o XACT_ABORT en en.

1 comentar a reversión de transacción en SQL Server 2005

  • noreply@blogger.com (Todd)

    Ten que observar que XACT_ABORT remata o actual * lote *, non todo o comando. Os lotes son separados coa palabra clave GO. Execución continuará no inicio do próximo lote.

    Este recurso tamén está SQL Server 2000, con todo compórtase de xeito lixeiramente diferente para varios erros.

    En SQL 2000, hai casos en que XACT_ABORT non consegue reverter a transacción automáticamente.

    Por exemplo:

    Inserir unha columna nome válido.

    Inserindo nunha chave primaria con IDENTITY_INSERT OFF.

    A execución dun SELECT que usa unha UDF inexistente.

    Estes tipos de erros son xeralmente debido a unha orde mal autoría, para que non ocorren na operación do día a día do seu programa, a menos que alguén se modifica o esquema. Pero eu explicar a súa posibilidade ao crear scripts de actualización da base de datos durante a implantación dunha nova versión dun proxecto, só no caso de implantación non saen como planificado.

    Hai formas de tratar con estes erros. O seu COMMIT debe estar no lote executando as instrucións DML. Tras o lote (tras a palabra chave GO) pode comprobar o@@TRANCOUNT para ver se é maior que cero e actuar en consecuencia. Normalmente reverter a transacción.

    As transaccións poden abranguer lotes, para que poida realizar un rollback nun lote subseguinte.

Deixe unha resposta

Pode usar estas etiquetas HTML

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>