Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
S’applique à :SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Entrepôt dans Microsoft Fabric
Base de données SQL dans Microsoft Fabric
Marque la fin d'une transaction implicite ou explicite réussie.
Si @@TRANCOUNT la valeur est 1, COMMIT TRANSACTION effectue toutes les modifications de données depuis le début de la transaction une partie permanente de la base de données, libère les ressources de transaction et décrémente @@TRANCOUNT la valeur 0.
Lorsqu’elle @@TRANCOUNT est supérieure à 1, COMMIT TRANSACTION décrémente @@TRANCOUNT par 1 et la transaction reste active.
Conventions de la syntaxe Transact-SQL
Syntax
Syntaxe pour SQL Server, Azure SQL Database, Azure SQL Managed Instance, base de données SQL dans Microsoft Fabric.
COMMIT [ { TRAN | TRANSACTION }
[ transaction_name | @tran_name_variable ] ]
[ WITH ( DELAYED_DURABILITY = { OFF | ON } ) ]
[ ; ]
Syntaxe pour Fabric Data Warehouse, Azure Synapse Analytics et Parallel Data Warehouse Database.
COMMIT [ TRAN | TRANSACTION ]
[ ; ]
Arguments
transaction_name
S’applique à : SQL Server 2008 (10.0.x) et versions ultérieures, Azure SQL Database, Azure SQL Managed Instance, SQL Database dans Microsoft Fabric.
Ignoré par le moteur de base de données lorsqu’il est spécifié avec COMMIT.
transaction_name spécifie un nom de transaction attribué par un précédent BEGIN TRANSACTION.
transaction_name devez respecter les règles des identificateurs, mais ne peut pas dépasser 32 caractères.
transaction_name pouvez être utilisé comme technique de documentation de code pour indiquer les instructions internes BEGIN TRANSACTION auxquelles l’instruction COMMIT TRANSACTION est associée.
@tran_name_variable
S’applique à : SQL Server 2008 (10.0.x) et versions ultérieures, Azure SQL Database, Azure SQL Managed Instance, SQL Database dans Microsoft Fabric.
Nom d’une variable définie par l’utilisateur contenant un nom de transaction valide. La variable doit être déclarée avec un type de données char, varchar, nchar ou nvarchar. Si plus de 32 caractères sont passés à la variable, seuls les 32 premiers caractères sont utilisés. Les caractères restants sont tronqués.
AVEC DELAYED_DURABILITY = { OFF | ON }
S’applique à : SQL Server 2008 (10.0.x) et versions ultérieures, Azure SQL Database, Azure SQL Managed Instance, SQL Database dans Microsoft Fabric.
Option qui demande à cette transaction d’être validée avec une durabilité différée. La requête est ignorée si la durabilité retardée est désactivée pour la base de données. Une transaction est validée avec une durabilité retardée, quelle que soit cette option si la durabilité retardée est forcée pour la base de données.
Pour plus d’informations, consultez Contrôler la durabilité d’une transaction.
Remarks
Il incombe à l’application de émettre COMMIT TRANSACTION à un moment où toutes les données référencées par la transaction atteignent l’état de cohérence prévu.
Si la transaction validée était une transaction distribuée Transact-SQL, COMMIT TRANSACTION déclenche MS DTC pour utiliser un protocole de validation en deux phases pour valider la transaction sur tous les serveurs impliqués dans la transaction. Lorsqu’une transaction locale s’étend sur deux bases de données ou plus sur la même instance du moteur de base de données, l’instance utilise une validation interne en deux phases pour valider la transaction dans toutes les bases de données impliquées dans la transaction.
Lorsqu’elle est utilisée pour des transactions internes, une validation ne libère pas de ressources ni n’apporte des modifications de données permanentes. Les modifications de données sont effectuées définitivement et les ressources sont libérées uniquement lorsque la transaction externe est validée. Chaque COMMIT TRANSACTION émission est @@TRANCOUNT supérieure à 1 décréments @@TRANCOUNT de 1, mais n’a aucun autre effet. Quand @@TRANCOUNT elle est finalement décrémentée à 0, la transaction externe entière est validée. Étant donné que transaction_name spécifié avec COMMIT TRANSACTION est ignoré par le moteur de base de données, en émettant un COMMIT TRANSACTION référencement du nom d’une transaction externe lorsqu’il n’y a que des transactions internes en attente de décréments @@TRANCOUNT d’ici 1.
L’émission d’un COMMIT TRANSACTION moment est @@TRANCOUNT égal à zéro entraîne une erreur, car il n’y a pas de correspondance .BEGIN TRANSACTION
Vous ne pouvez pas restaurer une transaction après l’émission d’une COMMIT TRANSACTION instruction, car les modifications de données sont déjà une partie permanente de la base de données.
Note
Le moteur de base de données ne prend pas en charge les transactions imbriquées gérables indépendamment. Une validation d’une transaction interne décrémente @@TRANCOUNT mais n’a aucun autre effet. Une restauration d’une transaction interne restaure toujours la transaction externe, sauf si un point d’enregistrement existe et est spécifié dans l’instruction ROLLBACK .
Permissions
Nécessite l’appartenance au rôle public.
Examples
Les exemples de code de cet article utilisent les bases de données d'exemple AdventureWorks2025 ou AdventureWorksDW2025, que vous pouvez télécharger à partir de la page d'accueil Microsoft SQL Server Samples and Community Projects.
A. Valider une transaction
S’applique à : SQL Server, Azure SQL Database, Azure SQL Managed Instance, sql database dans Microsoft Fabric, Azure Synapse Analytics, Analytics Platform System (PDW)
L'exemple suivant supprime un candidat à un emploi.
BEGIN TRANSACTION;
DELETE FROM HumanResources.JobCandidate
WHERE JobCandidateID = 13;
COMMIT TRANSACTION;
B. Valider une transaction externe et les transactions internes
S’applique à : SQL Server, Azure SQL Database, Azure SQL Managed Instance, base de données SQL dans Microsoft Fabric.
L’exemple suivant crée une table, démarre une transaction externe et deux transactions internes, puis valide chaque transaction. Les paramètres transaction_name utilisés dans cet exemple aident le développeur à s’assurer que le nombre correct de validations est codé pour décrémenter @@TRANCOUNT sur 0 et valider la transaction externe.
IF OBJECT_ID(N'TestTran', N'U') IS NOT NULL
DROP TABLE TestTran;
GO
CREATE TABLE TestTran (
Cola INT PRIMARY KEY,
Colb CHAR(3)
);
GO
-- This statement sets @@TRANCOUNT to 1.
BEGIN TRANSACTION OuterTran;
PRINT N'Transaction count after BEGIN OuterTran = ' + CAST(@@TRANCOUNT AS NVARCHAR(10));
INSERT INTO TestTran
VALUES (1, 'aaa');
-- This statement sets @@TRANCOUNT to 2.
BEGIN TRANSACTION Inner1;
PRINT N'Transaction count after BEGIN Inner1 = ' + CAST(@@TRANCOUNT AS NVARCHAR(10));
INSERT INTO TestTran
VALUES (2, 'bbb');
-- This statement sets @@TRANCOUNT to 3.
BEGIN TRANSACTION Inner2;
PRINT N'Transaction count after BEGIN Inner2 = ' + CAST(@@TRANCOUNT AS NVARCHAR(10));
INSERT INTO TestTran
VALUES (3, 'ccc');
-- This statement decrements @@TRANCOUNT to 2.
-- Nothing is committed.
COMMIT TRANSACTION Inner2;
PRINT N'Transaction count after COMMIT Inner2 = ' + CAST(@@TRANCOUNT AS NVARCHAR(10));
-- This statement decrements @@TRANCOUNT to 1.
-- Nothing is committed.
COMMIT TRANSACTION Inner1;
PRINT N'Transaction count after COMMIT Inner1 = ' + CAST(@@TRANCOUNT AS NVARCHAR(10));
-- This statement decrements @@TRANCOUNT to 0 and
-- commits outer transaction OuterTran.
COMMIT TRANSACTION OuterTran;
PRINT N'Transaction count after COMMIT OuterTran = ' + CAST(@@TRANCOUNT AS NVARCHAR(10));
Contenu connexe
- DÉMARRER LA TRANSACTION DISTRIBUÉE (Transact-SQL)
- DÉBUT DE LA TRANSACTION (Transact-SQL)
- COMMIT DU TRAVAIL (Transact-SQL)
- ANNULATION DE LA TRANSACTION (Transact-SQL)
- TRAVAIL DE RETOUR EN ARRIÈRE (Transact-SQL)
- SAUVEGARDER LA TRANSACTION (Transact-SQL)
- @@TRANCOUNT (Transact-SQL)
- Guide du verrouillage des transactions et du contrôle de version de ligne