SET XACT_ABORT (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsAnalitik Platform Sistemi (PDW)Microsoft Fabric'te SQL veritabanı

Uyarı

THROW ifadesi onur.SET XACT_ABORT RAISERROR ise bunu yapmaz. Yeni uygulamalar RAISERROR yerine THROW kullanmalı.

Bir Transact-SQL ifadesi çalıştırma hatası yarattığında SQL Server'ın mevcut işlemi otomatik olarak geri alıp almayacağını belirtir.

Transact-SQL söz dizimi kuralları

Sözdizimi

SET XACT_ABORT { ON | OFF }

Açıklamalar

ON'da, SET XACT_ABORT Transact-SQL ifadesi bir çalışma zamanı hatası yaratırsa, tüm işlem sonlandırılır ve geri alınır.

KAPALı olduğunda SET XACT_ABORT , bazı durumlarda sadece hatayı ortaya çıkaran Transact-SQL ifadesi geri alınır ve işlem işlemeye devam eder. Hatanın ciddiyetine bağlı olarak, KAPALI olsa SET XACT_ABORT bile tüm işlem geri alınabilir. KAPA, bir T-SQL ifadesinde varsayılan ayardır, tetikleyicide varsayılan ayar ise ON'dur.

Söz dizimi hataları gibi derleme hataları SET XACT_ABORTetkilenmez.

XACT_ABORTçoğu OLE DB sağlayıcısına karşı örtük veya açık bir işlem için, SQL Server dahil, veri değiştirme ifadeleri için ON'da ayarlanmalıdır. Bu seçeneğin zorunlu olmadığı tek durum, sağlayıcının iç içe işlemleri desteklemesidir.

=OFF olduğunda ANSI_WARNINGS, izin ihlalleri işlemlerin iptalına neden olur.

Ayarları SET XACT_ABORT işleme veya çalıştırma zamanında ayarlanır, ayrıştırma zamanında değil.

Bu ayarın mevcut ayarını görmek için aşağıdaki sorguyu çalıştırın.

DECLARE @XACT_ABORT VARCHAR(3) = 'OFF';
IF ( (16384 & @@OPTIONS) = 16384 ) SET @XACT_ABORT = 'ON';
SELECT @XACT_ABORT AS XACT_ABORT;

Örnekler

Aşağıdaki kod örneği, başka Transact-SQL ifadeleri olan bir işlemde yabancı anahtar ihlali hatasına yol açar. İlk ifade setinde hata oluşturulur, ancak diğer imalar başarıyla yürütüler ve işlem başarıyla gerçekleştirilir. İkinci cümle setinde, SET XACT_ABORT 'ye ONayarlanır. Bu, ifade hatasının toplu işlemi sonlandırmasına ve işlemin geri alınmasına neden olur.

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.