Exportieren (0) Drucken
Alle erweitern
Erweitern Minimieren
Dieser Artikel wurde manuell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

SET XACT_ABORT (Transact-SQL)

Hinweis Hinweis

SET XACT_ABORT RAISERROR wird von der THROW-Anweisung nicht beachtet. Neue Anwendungen sollten THROW anstelle von RAISERROR verwenden.

Gibt an, ob SQL Server für die aktuelle Transaktion automatisch ein Rollback ausführt, wenn eine Transact-SQL-Anweisung einen Laufzeitfehler ausgibt.

Gilt für: SQL Server (SQL Server 2008 bis aktuelle Version), Windows Azure SQL-Datenbank (Ursprüngliche Version bis aktuelle Version).

Themenlink (Symbol) Transact-SQL-Syntaxkonventionen

SET XACT_ABORT { ON | OFF }

Wenn SET XACT_ABORT auf ON festgelegt ist und eine Transact-SQL-Anweisung einen Laufzeitfehler auslöst, wird die gesamte Transaktion beendet, und es wird ein Rollback für sie ausgeführt.

Wenn SET XACT_ABORT auf OFF festgelegt ist, wird in einigen Fällen nur für die Transact-SQL-Anweisung, die den Fehler ausgelöst hat, ein Rollback ausgeführt, und die Transaktion wird fortgesetzt. Abhängig vom Schweregrad des Fehlers wird möglicherweise für die gesamte Transaktion ein Rollback ausgeführt, wenn SET XACT_ABORT auf OFF festgelegt ist. OFF ist die Standardeinstellung.

Kompilierungsfehler, wie z. B. Syntaxfehler, sind von SET XACT_ABORT nicht betroffen.

Es ist erforderlich, dass XACT_ABORT für Anweisungen zur Datenänderung in einer impliziten oder expliziten Transaktion für die meisten OLE DB-Anbieter, einschließlich SQL Server, auf ON festgelegt ist. Nur wenn der Anbieter geschachtelte Transaktionen unterstützt, ist diese Option nicht erforderlich.

Die Einstellung von SET XACT_ABORT wird zur Ausführungszeit und nicht zur Analysezeit festgelegt.

Um die aktuelle Einstellung für diese 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

Im folgenden Codebeispiel wird eine Fremdschlüsselverletzung in einer Transaktion verursacht, die weitere 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.

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

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2015 Microsoft