Share via


küme XACT_ABORT (Transact-SQL)

Belirtir mi SQL Server Geçerli işlem geri otomatik olarak alır, bir Transact-SQL Deyim bir çalışma-yükseltir saat hata.

Topic link iconTransact-SQL sözdizimi kuralları

SET XACT_ABORT { ON | OFF }

Remarks

küme XACT_ABORT ON, durumunda olduğunda bir Transact-SQL deyim bir çalışma zamanı hatası üretir, tüm işlem sonlandırıldı ve geri alındı.

küme XACT_ABORT yalnızca bazı durumlarda, KAPALı olduğunda Transact-SQL Hata geçirilen deyim geri alınır ve hareket işleme devam eder. Hatanın önem bağlı olarak, tüm işlemin geri alınması bile, küme XACT_ABORT KAPALı'dır.OFF varsayılan ayardır.

Sözdizimi hatası gibi derleme hataları ile küme XACT_ABORT etkilenmez.

XACT_ABORT ON veri değişikliği deyimlerinde karşı çoğu OLE DB sağlayıcıları da dahil olmak üzere, örtülü veya açık bir hareketi için küme olması gerekir SQL Server. Bu seçenek gerekmez yalnızca sağlayıcı iç içe geçmiş işlem destekleyip desteklemediğini geçerlidir.Daha fazla bilgi için bkz:Dağıtılmış sorgular ve dağıtılmış hareketleri.

küme XACT_ABORT ayarını ayarlayın yürütmek veya saat ve çözümleme saat değil.

Örnekler

Aşağıdaki kod örneği, bir yabancı anahtar ihlali hatası olan başka bir işlemde neden oluyor Transact-SQL ifadeler. Ilk küme deyimleri, hata oluşturulur, ancak diğer ifadeleri başarıyla yürütür ve işlem başarıyla edinmiştir.Ifadeler, ikinci kümedeki SET XACT_ABORT ayarlamak ON. Bu toplu iş iş iş sonlandırmak deyim hata neden olur ve işlem geri alındı.

USE AdventureWorks;
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