Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL Database in Microsoft Fabric
Opmerking
De THROW-verklaring eert SET XACT_ABORT. RAISERROR doet dat niet. Nieuwe applicaties zouden THROW moeten gebruiken in plaats van RAISERROR.
Specificeert of SQL Server de huidige transactie automatisch terugrolt wanneer een Transact-SQL-instructie een runtime-fout oproept.
Transact-SQL syntaxis-conventies
Syntaxis
SET XACT_ABORT { ON | OFF }
Opmerkingen
Wanneer SET XACT_ABORT AAN is, wordt de hele transactie beëindigd en teruggedraaid als een Transact-SQL-instructie een runtime-fout veroorzaakt.
Wanneer SET XACT_ABORT UIT is, wordt in sommige gevallen alleen de Transact-SQL-instructie die de fout veroorzaakte teruggedraaid en gaat de transactie verder met verhandeling. Afhankelijk van de ernst van de fout kan de hele transactie worden teruggedraaid, zelfs als SET XACT_ABORT UIT is. OFF is de standaardinstelling in een T-SQL-statement, terwijl ON de standaardinstelling is in een trigger.
Compilefouten, zoals syntaxisfouten, worden niet beïnvloed door SET XACT_ABORT.
XACT_ABORT moet AAN worden ingesteld voor data-wijzigingsstatements in een impliciete of expliciete transactie tegen de meeste OLE DB-aanbieders, inclusief SQL Server. Het enige geval waarin deze optie niet nodig is, is als de provider geneste transacties ondersteunt.
Wanneer ANSI_WARNINGS=UIT, zorgen permissie-overtredingen ervoor dat transacties worden afgebroken.
De instelling van SET XACT_ABORT wordt ingesteld tijdens uitvoeren of uitvoeren en niet tijdens parsetijd.
Om de huidige instelling voor deze instelling te bekijken, voert u de volgende query uit.
DECLARE @XACT_ABORT VARCHAR(3) = 'OFF';
IF ( (16384 & @@OPTIONS) = 16384 ) SET @XACT_ABORT = 'ON';
SELECT @XACT_ABORT AS XACT_ABORT;
Voorbeelden
Het volgende codevoorbeeld veroorzaakt een vreemde sleutel-overtredingfout in een transactie met andere Transact-SQL statements. In de eerste set statements wordt de fout gegenereerd, maar de andere statements worden succesvol uitgevoerd en de transactie wordt succesvol gecommit. In de tweede set stellingen SET XACT_ABORT wordt gezet op ON. Dit zorgt ervoor dat de instructiefout de batch beëindigt en de transactie wordt teruggerold.
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
Zie ook
- GOOI (Transact-SQL)
- BEGIN TRANSACTIE (Transact-SQL)
- DOORVOERTRANSACTIE (Transact-SQL)
- TRANSACTIE voor terugdraaien (Transact-SQL)
- SET-instructies (Transact-SQL)
- @@TRANCOUNT (Transact-SQL)