Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL Server
Azure SQL-Datenbank
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL-Datenbank in Microsoft Fabric
Hinweis
Die THROW-Aussage würdigt SET XACT_ABORT. RAISERROR wird nicht berücksichtigt. In neuen Anwendungen sollte THROW statt RAISERROR verwendet werden.
Gibt an, ob SQL Server die aktuelle Transaktion automatisch zurücksetzt, wenn eine Transact-SQL-Anweisung einen Laufzeitfehler auslöst.
Transact-SQL-Syntaxkonventionen
Syntax
SET XACT_ABORT { ON | OFF }
Hinweise
Wenn SET XACT_ABORT ON ist, wird die gesamte Transaktion beendet und zurückgerollt, wenn eine Transact-SQL-Anweisung einen Laufzeitfehler auslöst.
Wenn SET XACT_ABORT AUS ist, wird in manchen Fällen nur die Transact-SQL-Anweisung, die den Fehler ausgelöst hat, zurückgesetzt und die Transaktion wird weiterverarbeitet. Je nach Schwere des Fehlers kann die gesamte Transaktion rückgängig gemacht werden, selbst wenn SET XACT_ABORT sie AUS ist. OFF ist die Standardeinstellung in einer T-SQL-Anweisung, während ON die Standardeinstellung in einem Trigger ist.
Kompilierungsfehler, wie z.B. Syntaxfehler, sind von SET XACT_ABORT nicht betroffen.
XACT_ABORTmuss für Datenänderungsanweisungen in einer impliziten oder expliziten Transaktion gegen die meisten OLE-Datenbankanbieter, einschließlich SQL Server, ON gesetzt werden. Nur wenn der Anbieter geschachtelte Transaktionen unterstützt, ist diese Option nicht erforderlich.
Wenn ANSI_WARNINGS=AUS, führen Berechtigungsverstöße dazu, dass Transaktionen abgebrochen werden.
Die Einstellung wird SET XACT_ABORT zur Ausführung oder Laufzeit und nicht zur Analysezeit festgelegt.
Um die aktuelle Einstellung anzuzeigen, führen Sie die folgende Abfrage aus.
DECLARE @XACT_ABORT VARCHAR(3) = 'OFF';
IF ( (16384 & @@OPTIONS) = 16384 ) SET @XACT_ABORT = 'ON';
SELECT @XACT_ABORT AS XACT_ABORT;
Beispiele
Das folgende Codebeispiel verursacht einen Fremdschlüsselverletzungsfehler in einer Transaktion, die andere Transact-SQL-Anweisungen enthält. In der ersten Anweisungsgruppe wird der Fehler generiert; die anderen Anweisungen werden jedoch erfolgreich ausgeführt, und für die Transaktion wird erfolgreich ein Commit ausgeführt. Im zweiten Anweisungssatz ist SET XACT_ABORT auf ON festgelegt. Der Anweisungsfehler bewirkt daher, dass der Batch abgebrochen und für die Transaktion ein Rollback ausgeführt wird.
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