Aracılığıyla paylaş


set xact_abort (Transact-SQL)

Belirtir olup olmadığını SQL Server otomatik olarak geçerli işlem geri alınır, bir Transact-SQL deyim harekete geçiren bir çalışma zamanı hatası.

Konu bağlantısı simgesiTransact-SQL sözdizimi kuralları

Sözdizimi

SET XACT_ABORT { ON | OFF }

Açıklamalar

Ne zaman set xact_abort ise on, bir Transact-SQL deyim harekete geçiren bir çalışma zamanı hatası, tüm işlemin sona erdi ve geri.

set xact_abort olduğunda off, yalnızca bazı durumlarda Transact-SQL deyim hataya neden geri alındı ve hareket işleme devam eder.Hata önem bağlı olarak, tüm hareket geri döndürülebilir bile ne zaman set xact_abort kapalı'dır.Varsayılan ayar kapalıdır.

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

xact_abort olmalı küme için örtülü bir veri değişikliği deyimleri ya da dahil olmak üzere çoğu ole DB sağlayıcıları karşı belirtik işlem SQL Server.Bu seçenek gerekli olmadığı sadece durum , sağlayıcı iç içe geçmiş hareketleri destekleyip desteklemediğini geçerlidir.Daha fazla bilgi için, bkz. Dağıtılmış sorgular ve dağıtılmış işlemler.

set xact_abort ayarı yürütmek sırasında küme veya çalışma saat ve ayrıştırma saatzaman.

Örnekler

Aşağıdaki kod örneği olan diğer bir işleme yabancı anahtar ihlali hatası neden Transact-SQL ifadeleri.İlk küme ifadeler, hata, diğer deyimleri yürütmek ancak başarıyla oluşturulur ve işlem başarıyla kararlıdır.İkinci küme ifadeler, SET XACT_ABORT olan küme ON.Bu toplu iş sonlandırmak deyim hata neden olur ve bu işlem geri alınır.

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