TechNet
Exportar (0) Imprimir
Expandir todo

SET XACT_ABORT (Transact-SQL)

 

Se aplica a: SQL Server 2016 Preview

**ESTE TEMA SE APLICA A:** ![](../Image/Applies%20to/yes.png)SQL Server \(a partir de 2008\) ![](../Image/Applies%20to/yes.png)Base de datos SQL de Azure ![](../Image/Applies%20to/yes.png)Almacenamiento de datos SQL de Azure ![](../Image/Applies%20to/yes.png)Almacenamiento de datos paralelos

System_CAPS_ICON_note.jpg Nota


La instrucción THROW respeta SET XACT_ABORT, pero RAISERROR no. Las aplicaciones nuevas deben usar THROW en lugar de RAISERROR.

Especifica si SQL Server revierte automáticamente la transacción actual cuando una instrucción Transact-SQL genera un error en tiempo de ejecución.

Se aplica a: de SQL Server (SQL Server 2008 a la versión actual), Base de datos SQL de Azure.

Topic link icon Convenciones de sintaxis de Transact-SQL

  
SET XACT_ABORT { ON | OFF }  

Cuando SET XACT_ABORT es ON, si una instrucción Transact-SQL genera un error en tiempo de ejecución, se termina toda la transacción y se revierte.

Cuando SET XACT_ABORT es OFF, en algunos casos solo se revierte la instrucción Transact-SQL que generó el error y la transacción continúa procesándose. Dependiendo de la gravedad del error, se puede revertir toda la transacción aun cuando SET XACT_ABORT sea OFF. OFF es el valor predeterminado.

Los errores de compilación, como los de sintaxis, no se ven afectados por SET XACT_ABORT.

XACT_ABORT debe estar establecida en ON para las instrucciones de modificación de datos en una transacción implícita o explícita para la mayoría de proveedores OLE DB, incluyendo SQL Server. El único caso donde no se requiere esta opción es si el proveedor acepta transacciones anidadas.

Cuando ANSI_WARNINGS=OFF, las infracciones de los permisos hacen que se anulen las transacciones.

La opción SET XACT_ABORT se establece en tiempo de ejecución, no en tiempo de análisis.

Para ver la configuración actual de este valor, ejecute la consulta siguiente.

DECLARE @XACT_ABORT VARCHAR(3) = 'OFF';  
IF ( (16384 & @@OPTIONS) = 16384 ) SET @XACT_ABORT = 'ON';  
SELECT @XACT_ABORT AS XACT_ABORT;  
  

El siguiente código de ejemplo genera un error de infracción de clave externa en una transacción que tiene otras instrucciones Transact-SQL. En el primer conjunto de instrucciones se genera el error, pero las demás instrucciones se ejecutan correctamente y la transacción se confirma también correctamente. En el segundo conjunto de instrucciones, SET XACT_ABORT se establece en ON. Esto hace que el error en la instrucción suspenda el lote y revierta la transacción.

USE AdventureWorks2012;  
GO  
IF OBJECT_ID(N't2', N'U') IS NOT NULL  
    DROP TABLE t2;  
GO  
IF OBJECT_ID(N't1', N'U') IS NOT NULL  
    DROP TABLE t1;  
GO  
CREATE TABLE t1  
    (a INT NOT NULL PRIMARY KEY);  
CREATE TABLE t2  
    (a INT NOT NULL REFERENCES t1(a));  
GO  
INSERT INTO t1 VALUES (1);  
INSERT INTO t1 VALUES (3);  
INSERT INTO t1 VALUES (4);  
INSERT INTO t1 VALUES (6);  
GO  
SET XACT_ABORT OFF;  
GO  
BEGIN TRANSACTION;  
INSERT INTO t2 VALUES (1);  
INSERT INTO t2 VALUES (2); -- Foreign key error.  
INSERT INTO t2 VALUES (3);  
COMMIT TRANSACTION;  
GO  
SET XACT_ABORT ON;  
GO  
BEGIN TRANSACTION;  
INSERT INTO t2 VALUES (4);  
INSERT INTO t2 VALUES (5); -- Foreign key error.  
INSERT INTO t2 VALUES (6);  
COMMIT TRANSACTION;  
GO  
-- SELECT shows only keys 1 and 3 added.   
-- Key 2 insert failed and was rolled back, but  
-- XACT_ABORT was OFF and rest of transaction  
-- succeeded.  
-- Key 5 insert error with XACT_ABORT ON caused  
-- all of the second transaction to roll back.  
SELECT *  
    FROM t2;  
GO  

THROW (Transact-SQL)
BEGIN TRANSACTION (Transact-SQL)
COMMIT TRANSACTION (Transact-SQL)
ROLLBACK TRANSACTION (Transact-SQL)
Instrucciones SET (Transact-SQL)
@@TRANCOUNT (Transact-SQL)

Adiciones de comunidad

Mostrar:
© 2016 Microsoft