Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
databáze SQL v Microsoft Fabric
Poznámka:
Prohlášení THROW ctí SET XACT_ABORT. RAISERROR ne. Nové aplikace by měly používat THROW místo RAISERROR.
Specifikuje, zda SQL Server automaticky vrátí aktuální transakci, když příkaz Transact-SQL vyvolá chybu za běhu.
Syntaxe
SET XACT_ABORT { ON | OFF }
Poznámky
Když je SET XACT_ABORT zapnutý, pokud příkaz Transact-SQL vyvolá chybu za běhu, celá transakce je ukončena a vrácena zpět.
Když je SET XACT_ABORT vypnutý, v některých případech se zpět vrátí pouze Transact-SQL příkaz, který chybu způsobil, a transakce pokračuje ve zpracování. V závislosti na závažnosti chyby může být celá transakce vrácena zpět i tehdy, když je NASTAVIT XACT_ABORT VYPNUTO. VYPNUTO je výchozí nastavení v příkazu T-SQL, zatímco ZAPNUTO je výchozí nastavení v triggeru.
Chyby při kompilaci, jako jsou syntaktické chyby, nejsou ovlivněny SET XACT_ABORT.
XACT_ABORT musí být nastaveno ON pro příkazy o úpravě dat v implicitní nebo explicitní transakci vůči většině poskytovatelů OLE DB, včetně SQL Serveru. Jediný případ, kdy tato možnost není nutná, je, pokud poskytovatel podporuje vnořené transakce.
Když ANSI_WARNINGS=VYPNUTO, porušení oprávnění způsobí přerušení transakcí.
Nastavení SET XACT_ABORT je nastaveno při spuštění nebo běhu a nikoli při parse.
Pro zobrazení aktuálního nastavení tohoto nastavení spusťte následující dotaz.
DECLARE @XACT_ABORT VARCHAR(3) = 'OFF';
IF ( (16384 & @@OPTIONS) = 16384 ) SET @XACT_ABORT = 'ON';
SELECT @XACT_ABORT AS XACT_ABORT;
Examples
Následující příklad kódu způsobuje chybu porušení cizího klíče v transakci, která obsahuje jiné Transact-SQL příkazy. V první sadě příkazů je chyba generována, ale ostatní příkazy se úspěšně spustí a transakce je úspěšně potvrzena. Ve druhé sadě tvrzení SET XACT_ABORT je nastaveno na ON. To způsobí, že chyba ve výpadku ukončí dávku a transakce se vrátí zpět.
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
Viz také
- HOĎ (Transact-SQL)
- ZAČÁTEK TRANSAKCE (Transact-SQL)
- transakce potvrzení (Transact-SQL)
- transakce vrácení zpět (Transact-SQL)
- Příkazy SET (Transact-SQL)
-
@@TRANCOUNT (Transact-SQL)