SET XACT_ABORT (Transact-SQL)SET XACT_ABORT (Transact-SQL)

APLICA-SE A: simSQL Server (a partir do 2008) simBanco de Dados SQL do Azure simSQL Data Warehouse do Azure simParallel Data Warehouse APPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Observação

A instrução THROW segue SET XACT_ABORT.The THROW statement honors SET XACT_ABORT. Isso não ocorre com RAISERROR.RAISERROR does not. Os novos aplicativos devem usar THROW em vez de RAISERROR.New applications should use THROW instead of RAISERROR.

Especifica se o SQL ServerSQL Server reverte automaticamente a transação atual quando uma instrução Transact-SQLTransact-SQL gerar um erro em tempo de execução.Specifies whether SQL ServerSQL Server automatically rolls back the current transaction when a Transact-SQLTransact-SQL statement raises a run-time error.

Ícone de link do tópico Convenções de sintaxe de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxeSyntax

SET XACT_ABORT { ON | OFF }  

RemarksRemarks

Quando SET XACT_ABORT for ON, se uma instrução Transact-SQLTransact-SQL gerar um erro em tempo de execução, a transação inteira será encerrada e revertida.When SET XACT_ABORT is ON, if a Transact-SQLTransact-SQL statement raises a run-time error, the entire transaction is terminated and rolled back.

Quando SET XACT_ABORT é OFF, em alguns casos, somente a instrução Transact-SQLTransact-SQL que gerou o erro é revertida e a transação continua a ser processada.When SET XACT_ABORT is OFF, in some cases only the Transact-SQLTransact-SQL statement that raised the error is rolled back and the transaction continues processing. Dependendo da gravidade do erro, a transação inteira pode ser revertida mesmo quando SET XACT_ABORT é OFF.Depending upon the severity of the error, the entire transaction may be rolled back even when SET XACT_ABORT is OFF. OFF é a configuração padrão.OFF is the default setting.

Os erros de compilação, como erros de sintaxe, não são afetados por SET XACT_ABORT.Compile errors, such as syntax errors, are not affected by SET XACT_ABORT.

XACT_ABORT deve ser definido como ON para instruções de modificação de dados em uma transação implícita ou explícita na maioria dos provedores OLE DB, incluindo o SQL ServerSQL Server.XACT_ABORT must be set ON for data modification statements in an implicit or explicit transaction against most OLE DB providers, including SQL ServerSQL Server. O único caso em que essa opção não é necessária é quando o provedor oferece suporte a transações aninhadas.The only case where this option is not required is if the provider supports nested transactions.

Quando ANSI_WARNINGS=OFF, as violações de permissões causam anulação das transações.When ANSI_WARNINGS=OFF, permissions violations cause transactions to abort.

A configuração de SET XACT_ABORT é definida no momento da execução ou em tempo de execução e não no momento da análise.The setting of SET XACT_ABORT is set at execute or run time and not at parse time.

Para exibir a configuração atual dessa configuração, execute a consulta a seguir.To view the current setting for this setting, run the following query.

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

ExemplosExamples

O exemplo de código a seguir causa um erro de violação de chave estrangeira em uma transação com outras instruções Transact-SQLTransact-SQL.The following code example causes a foreign key violation error in a transaction that has other Transact-SQLTransact-SQL statements. No primeiro conjunto de instruções, o erro é gerado, mas as outras instruções são executadas com êxito e a transação é confirmada com êxito.In the first set of statements, the error is generated, but the other statements execute successfully and the transaction is successfully committed. No segundo conjunto de instruções, SET XACT_ABORT é definido como ON.In the second set of statements, SET XACT_ABORT is set to ON. Isto faz o erro de instrução encerrar o lote e a transação ser revertida.This causes the statement error to terminate the batch and the transaction is rolled back.

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  

Consulte TambémSee Also

THROW (Transact-SQL) THROW (Transact-SQL)
BEGIN TRANSACTION (Transact-SQL) BEGIN TRANSACTION (Transact-SQL)
COMMIT TRANSACTION (Transact-SQL) COMMIT TRANSACTION (Transact-SQL)
ROLLBACK TRANSACTION (Transact-SQL) ROLLBACK TRANSACTION (Transact-SQL)
Instruções SET (Transact-SQL) SET Statements (Transact-SQL)
@@TRANCOUNT (Transact-SQL)@@TRANCOUNT (Transact-SQL)