Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL-databas i Microsoft Fabric
Anmärkning
THROW-uttalandet hedrar SET XACT_ABORT. RAISERROR gör det inte. Nya applikationer bör använda THROW istället för RAISERROR.
Specificerar om SQL Server automatiskt rullar tillbaka den aktuella transaktionen när en Transact-SQL-sats ger ett körtidsfel.
Transact-SQL syntaxkonventioner
Syntax
SET XACT_ABORT { ON | OFF }
Anmärkningar
När SET XACT_ABORT är PÅ, om ett Transact-SQL-uttryck ger ett körtidsfel, avslutas hela transaktionen och rullas tillbaka.
När SET XACT_ABORT är OFF rullas i vissa fall endast Transact-SQL-satsen som gav felet tillbaka och transaktionen fortsätter att bearbetas. Beroende på felets allvar kan hela transaktionen rullas tillbaka även när STÄLLT XACT_ABORT är AV. OFF är standardinställningen i en T-SQL-sats, medan ON är standardinställningen i en trigger.
Kompileringsfel, såsom syntaxfel, påverkas inte av SET XACT_ABORT.
XACT_ABORT måste vara PÅ för dataändringarsuttalanden i en implicit eller explicit transaktion mot de flesta OLE DB-leverantörer, inklusive SQL Server. Det enda fallet där detta alternativ inte krävs är om leverantören stödjer nästlade transaktioner.
När ANSI_WARNINGS=OFF orsakar behörighetsbrott att transaktioner avbryts.
Inställningen för SET XACT_ABORT är satt vid exekverings- eller körningstid och inte vid parsetid.
För att se den aktuella inställningen för denna inställning, kör följande fråga.
DECLARE @XACT_ABORT VARCHAR(3) = 'OFF';
IF ( (16384 & @@OPTIONS) = 16384 ) SET @XACT_ABORT = 'ON';
SELECT @XACT_ABORT AS XACT_ABORT;
Examples
Följande kodexempel orsakar ett främmande nyckelbrott i en transaktion som har andra Transact-SQL-satser. I den första uppsättningen satser genereras felet, men de andra satserna utförs framgångsrikt och transaktionen genomförs framgångsrikt. I den andra uppsättningen av satser SET XACT_ABORT sätts till ON. Detta gör att satsfelet avslutar batchen och transaktionen rullas tillbaka.
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