SET XACT_ABORT (Transact-SQL)
S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
Remarque
L’instruction THROW respecte SET XACT_ABORT, contrairement à RAISERROR. Les nouvelles applications doivent utiliser THROW au lieu de RAISERROR.
Indique si SQL Server restaure automatiquement la transaction en cours lorsqu'une instruction Transact-SQL déclenche une erreur d'exécution.
Conventions de la syntaxe Transact-SQL
Syntaxe
SET XACT_ABORT { ON | OFF }
Remarque
Pour afficher la syntaxe Transact-SQL pour SQL Server 2014 (12.x) et versions antérieures, consultez la Documentation sur les versions antérieures.
Notes
Lorsque SET XACT_ABORT est défini sur ON et qu'une instruction Transact-SQL génère une erreur d'exécution, la transaction est interrompue et annulée dans son intégralité.
Si SET XACT_ABORT est défini sur OFF, dans certains cas seulement, l'instruction Transact-SQL qui a généré l'erreur est annulée et le traitement de la transaction se poursuit. Selon la gravité de l'erreur, la transaction peut être quand même annulée dans son intégralité lorsque SET XACT_ABORT est défini sur OFF. OFF est le paramètre par défaut dans une instruction T-SQL, tandis que ON est le paramètre par défaut dans un déclencheur.
Les erreurs de compilation, comme les erreurs de syntaxe, ne sont pas affectées par l'option SET XACT_ABORT.
XACT_ABORT doit être défini sur ON pour les instructions de modification des données dans une transaction implicite ou explicite avec la plupart des fournisseurs OLE DB, y compris SQL Server. Le seul cas où cette option n'est pas obligatoire, c'est lorsque le fournisseur prend en charge les transactions imbriquées.
Lorsque ANSI_WARNINGS=OFF, des violations d'autorisations peuvent provoquer l'abandon de transactions.
L'option SET XACT_ABORT est définie lors de l'exécution, et non pas durant l'analyse.
Pour afficher la valeur actuelle de ce paramètre, exécutez la requête suivante.
DECLARE @XACT_ABORT VARCHAR(3) = 'OFF';
IF ( (16384 & @@OPTIONS) = 16384 ) SET @XACT_ABORT = 'ON';
SELECT @XACT_ABORT AS XACT_ABORT;
Exemples
L'exemple suivant provoque une erreur de violation de clé étrangère dans une transaction comportant d'autres instructions Transact-SQL. Dans le premier jeu d'instructions, l'erreur est générée mais les autres instructions sont correctement exécutées et la transaction est validée. Dans le deuxième jeu d'instructions, SET XACT_ABORT
est défini sur ON
. L'erreur met alors fin à l'exécution du traitement d'instructions et la transaction est annulée.
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
Voir aussi
Commentaires
https://aka.ms/ContentUserFeedback.
Prochainement : Tout au long de l'année 2024, nous supprimerons progressivement les GitHub Issues en tant que mécanisme de retour d'information pour le contenu et nous les remplacerons par un nouveau système de retour d'information. Pour plus d’informations, voir:Soumettre et afficher des commentaires pour