set xact_abort (Transact-sql)

[!NOT]

THROWDeyimi onur SET XACT_ABORT RAISERRORyok. Yeni uygulamaları kullanması gereken THROWyerine RAISERROR.

Belirtir olup olmadığını SQL Serverotomatik olarak geçerli hareketi geri alır zaman bir Transact-SQLdeyimi bir çalıştırma hatası yükseltir.

Konu bağlantısı simgesi Transact-SQL Sözdizim Kuralları

Sözdizimi

SET XACT_ABORT { ON | OFF }

Açıklamalar

Ne zaman set xact_abort tır, eğer bir Transact-SQLdeyimi bir çalıştırma hatası yükseltir, tüm işlemi sonlandırıldı ve geri alındı.

set xact_abort ne zaman kapalı, sadece bazı durumlarda Transact-SQLhata geçirilen deyimi geri alındı ve hareket işleme devam eder. Hata önem bağlı olarak, tüm hareket geri alınması hatta set xact_abort kapalı olduğunda. Varsayılan ayar kapalıdır.

Sözdizimi hatası gibi derleme hataları set xact_abort tarafından etkilenmez.

xact_abort ayarlanmalıdır on veri değişikliği deyimleri dahil çoğu ole db sağlayıcıları karşı örtülü veya açık bir hareket için SQL Server. Bu seçenek gerekli olmadığı tek sağlayıcı iç içe geçmiş hareketleri destekleyip desteklemediğini durumda.

set xact_abort ayarı ayarlanır yürütme veya zaman değil ayrıştırma saati ve çalıştırın.

Örnekler

Aşağıdaki kod örneği diğer bir harekette bir yabancı anahtar ihlali hataya neden Transact-SQLdeyimleri. İfadeleri ilk kümesi, hata üretilir, ancak diğer deyimleri başarıyla yürütmek ve işlem başarıyla kararlıdır. İkinci durumda olan ifadeler, SET XACT_ABORTayarı ON. Bu toplu işlem sonlandırmak deyimi hatasına neden olur ve işlem geri alınır.

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

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

Ayrıca bkz.

Başvuru

throw (Transact-sql)

BEGIN TRANSACTION (Transact-SQL)

TAMAMLAMA hareket (Transact-sql)

rollback TRANSACTION (Transact-sql)

Deyimiyle (Transact-sql) bırak

@@ trancount (Transact-sql)