COMMIT TRANSACTION (Transact-SQL)COMMIT TRANSACTION (Transact-SQL)

S’APPLIQUE À : ouiSQL Server ouiAzure SQL Database ouiAzure SQL Data Warehouse ouiParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Marque la fin d'une transaction implicite ou explicite réussie.Marks the end of a successful implicit or explicit transaction. Si @@TRANCOUNT a la valeur 1, COMMIT TRANSACTION rend permanentes toutes les modifications de données effectuées dans la base de données depuis le début de la transaction, libère les ressources détenues par la transaction et décrémente @@TRANCOUNT à 0.If @@TRANCOUNT is 1, COMMIT TRANSACTION makes all data modifications since the start of the transaction a permanent part of the database, frees the transaction's resources, and decrements @@TRANCOUNT to 0. Si @@TRANCOUNT est supérieur à 1, COMMIT TRANSACTION décrémente @@TRANCOUNT de 1 seulement et la transaction reste active.When @@TRANCOUNT is greater than 1, COMMIT TRANSACTION decrements @@TRANCOUNT only by 1 and the transaction stays active.

Icône Lien de l’article Conventions de la syntaxe Transact-SQLArticle link icon Transact-SQL Syntax Conventions

SyntaxeSyntax

-- Applies to SQL Server (starting with 2008) and Azure SQL Database
  
COMMIT [ { TRAN | TRANSACTION }  [ transaction_name | @tran_name_variable ] ] [ WITH ( DELAYED_DURABILITY = { OFF | ON } ) ]  
[ ; ]  
-- Applies to Azure SQL Data Warehouse and Parallel Data Warehouse Database
  
COMMIT [ TRAN | TRANSACTION ] 
[ ; ]  

ArgumentsArguments

transaction_nametransaction_name
S’APPLIQUE À : SQL Server et Azure SQL DatabaseAPPLIES TO: SQL Server and Azure SQL Database

Ignoré par le Moteur de base de données SQL ServerSQL Server Database Engine.Is ignored by the Moteur de base de données SQL ServerSQL Server Database Engine. transaction_name spécifie un nom de transaction attribué par une instruction BEGIN TRANSACTION antérieure.transaction_name specifies a transaction name assigned by a previous BEGIN TRANSACTION. transaction_name doit être conforme aux règles applicables aux identificateurs, mais ne doit pas comporter plus de 32 caractères.transaction_namemust conform to the rules for identifiers, but can't exceed 32 characters. transaction_name indique aux programmeurs l’instruction BEGIN TRANSACTION imbriquée à laquelle l’instruction COMMIT TRANSACTION est associée.transaction_name indicates to programmers which nested BEGIN TRANSACTION the COMMIT TRANSACTION is associated with.

*@tran_name_variable*
S’APPLIQUE À : SQL Server et Azure SQL DatabaseAPPLIES TO: SQL Server and Azure SQL Database

Nom d'une variable définie par l'utilisateur et contenant un nom de transaction valide.Is the name of a user-defined variable containing a valid transaction name. La variable doit être déclarée avec un type de données char, varchar, nchar ou nvarchar.The variable must be declared with a char, varchar, nchar, or nvarchar data type. Si plus de 32 caractères sont passés à la variable, seuls 32 caractères sont utilisés ; les autres caractères sont tronqués.If more than 32 characters are passed to the variable, only 32 characters will be used; the remaining characters are truncated.

DELAYED_DURABILITYDELAYED_DURABILITY
S’APPLIQUE À : SQL Server et Azure SQL DatabaseAPPLIES TO: SQL Server and Azure SQL Database

Option qui demande que cette transaction soit validée avec une durabilité différée.Option that requests this transaction should be committed with delayed durability. La demande est ignorée si la base de données a été modifiée avec DELAYED_DURABILITY = DISABLED ou DELAYED_DURABILITY = FORCED.The request is ignored if the database has been altered with DELAYED_DURABILITY = DISABLED or DELAYED_DURABILITY = FORCED. Pour plus d’informations, consultez Contrôler la durabilité d’une transaction.For more information, see Control Transaction Durability.

NotesRemarks

Il incombe au programmeur Transact-SQLTransact-SQL de n’émettre une instruction COMMIT TRANSACTION qu’au moment où toutes les données référencées par la transaction sont logiquement correctes.It's the responsibility of the Transact-SQLTransact-SQL programmer to issue COMMIT TRANSACTION only at a point when all data referenced by the transaction is logically correct.

Si la transaction validée est une transaction Transact-SQLTransact-SQL distribuée, COMMIT TRANSACTION déclenche MS DTC pour utiliser un protocole de validation en deux phases qui valide tous les serveurs concernés par la transaction.If the transaction committed was a Transact-SQLTransact-SQL distributed transaction, COMMIT TRANSACTION triggers MS DTC to use a two-phase commit protocol to commit all of the servers involved in the transaction. Lorsqu’une transaction locale affecte plusieurs bases de données sur une même instance de Moteur de base de donnéesDatabase Engine, celle-ci utilise une validation interne en deux phases pour toutes les bases de données concernées par la transaction.When a local transaction spans two or more databases on the same instance of the Moteur de base de donnéesDatabase Engine, the instance uses an internal two-phase commit to commit all of the databases involved in the transaction.

Dans les transactions imbriquées, la validation des transactions internes ne libère pas les ressources et ne rend pas leurs modifications permanentes.When used in nested transactions, commits of the inner transactions don't free resources or make their modifications permanent. Les modifications de données sont rendues permanentes et les ressources ne sont libérées que lorsque la transaction externe est validée.The data modifications are made permanent and resources freed only when the outer transaction is committed. Chaque instruction COMMIT TRANSACTION exécutée quand @@TRANCOUNT est supérieur à 1 décrémente simplement @@TRANCOUNT de 1.Each COMMIT TRANSACTION issued when @@TRANCOUNT is greater than one simply decrements @@TRANCOUNT by 1. Quand @@TRANCOUNT atteint 0, la totalité de la transaction externe est validée.When @@TRANCOUNT is finally decremented to 0, the entire outer transaction is committed. L’argument transaction_name étant ignoré par Moteur de base de donnéesDatabase Engine, l’émission d’une instruction COMMIT TRANSACTION faisant référence au nom d’une transaction externe, tandis que des transactions internes sont en attente, réduit seulement @@TRANCOUNT de 1.Because transaction_name is ignored by the Moteur de base de donnéesDatabase Engine, issuing a COMMIT TRANSACTION referencing the name of an outer transaction when there are outstanding inner transactions only decrements @@TRANCOUNT by 1.

L’émission d’une instruction COMMIT TRANSACTION lorsque @@TRANCOUNT est égal à 0 génère un message d’erreur indiquant l’absence d’instruction BEGIN TRANSACTION correspondante.Issuing a COMMIT TRANSACTION when @@TRANCOUNT is zero results in an error; there's no corresponding BEGIN TRANSACTION.

Il n’est plus possible d’annuler une transaction une fois l’instruction COMMIT TRANSACTION émise, car les données modifiées sont enregistrées de manière permanente dans la base de données.You can't roll back a transaction after a COMMIT TRANSACTION statement is issued because the data modifications have been made a permanent part of the database.

Le Moteur de base de donnéesDatabase Engine incrémente le nombre de transactions pour une instruction d'une unité seulement lorsque ce nombre est égal à 0 au début de l'instruction.The Moteur de base de donnéesDatabase Engine increments the transaction count within a statement only when the transaction count is 0 at the start of the statement.

AutorisationsPermissions

Nécessite l'appartenance au rôle public .Requires membership in the public role.

ExemplesExamples

A.A. Validation d’une transactionCommitting a transaction

S’APPLIQUE À : SQL Server, Azure SQL Database, Azure SQL Data Warehouse et Parallel Data WarehouseAPPLIES TO: SQL Server, Azure SQL Database, Azure SQL Data Warehouse, and Parallel Data Warehouse

L'exemple suivant supprime un candidat à un emploi.The following example deletes a job candidate. Il utilise AdventureWorks.It uses AdventureWorks.

BEGIN TRANSACTION;   
DELETE FROM HumanResources.JobCandidate  
    WHERE JobCandidateID = 13;   
COMMIT TRANSACTION;   

B.B. Validation d'une transaction imbriquéeCommitting a nested transaction

S’APPLIQUE À : SQL Server et Azure SQL DatabaseAPPLIES TO: SQL Server and Azure SQL Database

L’exemple suivant crée une table, génère trois niveaux de transactions imbriquées, puis valide la transaction imbriquée.The following example creates a table, generates three levels of nested transactions, and then commits the nested transaction. Bien que chaque instruction COMMIT TRANSACTION comporte un paramètre transaction_name, il n’existe aucune relation entre les instructions COMMIT TRANSACTION et BEGIN TRANSACTION.Although each COMMIT TRANSACTION statement has a transaction_name parameter, there's no relationship between the COMMIT TRANSACTION and BEGIN TRANSACTION statements. Les paramètres transaction_name aident simplement le programmeur à vérifier que le nombre correct de validations a été codé pour décrémenter @@TRANCOUNT jusqu’à 0, ce qui valide la transaction externe.The transaction_name parameters help the programmer ensure that the correct number of commits are coded to decrement @@TRANCOUNT to 0 and so to commit the outer transaction.

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));  

Voir aussiSee Also

BEGIN DISTRIBUTED TRANSACTION (Transact-SQL) BEGIN DISTRIBUTED TRANSACTION (Transact-SQL)
BEGIN TRANSACTION (Transact-SQL) BEGIN TRANSACTION (Transact-SQL)
COMMIT WORK (Transact-SQL) COMMIT WORK (Transact-SQL)
ROLLBACK TRANSACTION (Transact-SQL) ROLLBACK TRANSACTION (Transact-SQL)
ROLLBACK WORK (Transact-SQL) ROLLBACK WORK (Transact-SQL)
SAVE TRANSACTION (Transact-SQL) SAVE TRANSACTION (Transact-SQL)
@@TRANCOUNT (Transact-SQL)@@TRANCOUNT (Transact-SQL)