Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Banco de Dados SQL do Azure
Instância Gerenciada de SQL do Azure
Azure Synapse Analytics
Sistema de Plataforma de Análise (PDW)
Banco de dados SQL no Microsoft Fabric
Observação
A declaração THROW homenageia SET XACT_ABORT. Isso não ocorre com RAISERROR. Os novos aplicativos devem usar THROW em vez de RAISERROR.
Especifica se o SQL Server reverte automaticamente a transação atual quando uma instrução Transact-SQL gera um erro em tempo de execução.
Convenções de sintaxe de Transact-SQL
Sintaxe
SET XACT_ABORT { ON | OFF }
Comentários
Quando SET XACT_ABORT está LIGADO, se uma instrução Transact-SQL gerar um erro em tempo de execução, toda a transação é encerrada e revertida.
Quando SET XACT_ABORT está DESLIGADO, em alguns casos apenas a instrução Transact-SQL que gerou o erro é revertida e a transação continua sendo processada. Dependendo da gravidade do erro, toda a transação pode ser desfeita mesmo quando SET XACT_ABORT está DESLIGADO. OFF é a configuração padrão em uma instrução T-SQL, enquanto ON é a configuração padrão em um gatilho.
Erros de compilação, como erros de sintaxe, não são afetados por SET XACT_ABORT.
XACT_ABORTdeve ser ativado para instruções de modificação de dados em transações implícitas ou explícitas contra a maioria dos provedores OLE DB, incluindo o SQL Server. O único caso em que essa opção não é necessária é quando o provedor oferece suporte a transações aninhadas.
Quando ANSI_WARNINGS=OFF, violações de permissões fazem com que as transações sejam abortadas.
A configuração de é definida em tempo de execução ou execução e não em tempo de SET XACT_ABORT análise.
Para exibir a configuração atual dessa configuração, execute a consulta a seguir.
DECLARE @XACT_ABORT VARCHAR(3) = 'OFF';
IF ( (16384 & @@OPTIONS) = 16384 ) SET @XACT_ABORT = 'ON';
SELECT @XACT_ABORT AS XACT_ABORT;
Exemplos
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-SQL. 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. No segundo conjunto de instruções, SET XACT_ABORT é definido como ON. Isto faz o erro de instrução encerrar o lote e a transação ser revertida.
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