Créer et gérer des transactions

Effectué

Pour démarrer explicitement une transaction, utilisez BEGIN TRANSACTION ou la version raccourcie, BEGIN TRAN.

Une fois qu’une transaction a été démarrée, elle doit être terminée avec :

  • COMMIT TRANSACTION, ou
  • ROLLBACK TRANSACTION.

Cela garantit que toutes les instructions de la transaction sont validées ensemble ou restaurées ensemble en cas d’erreur.

Les transactions durent jusqu’à ce qu’une commande COMMIT TRANSACTION ou ROLLBACK TRANSACTION soit émise, ou que la connexion soit supprimée. Si la connexion est interrompue en cours de transaction, la transaction entière est annulée.

Les transactions peuvent être imbriquées, auquel cas les transactions internes seront annulées si la transaction externe est annulée.

Aucune erreur n’est détectée

Lorsque les instructions de votre transaction se sont terminées sans erreur, utilisez COMMIT TRANSACTION, parfois abrégé pour COMMIT TRAN. Cela valide les modifications apportées à la base de données. Cela libère également les ressources telles que les verrous conservés pendant la transaction.

Si une erreur est détectée

Si une erreur s’est produite dans la transaction, utilisez la commande ROLLBACK.

ROLLBACK annule toutes les modifications apportées aux données pendant la transaction, la laissant dans l’état qu’elle était avant le démarrage de la transaction. ROLLBACK libère également des ressources, comme les verrous, maintenues pour la transaction.

XACT_ABORT

Lorsque SET XACT_ABORT est activé, si SQL Server génère une erreur, l’intégralité de la transaction est restaurée. Lorsque SET XACT_ABORT est OFF, seule l’instruction qui a déclenché l’erreur est restaurée si la gravité de l’erreur est faible.

Par exemple, lorsque SET XACT_ABORT est OFF, une transaction comporte trois instructions. Deux n’ont aucune erreur, mais la troisième interrompt une contrainte de vérification. Dans cet exemple, même si les trois instructions se trouvent dans une transaction, deux d’entre elles sont validées. Dans le même exemple, si l’erreur a été provoquée par un type de données incorrect, cela aurait été suffisamment sérieux pour émettre une restauration, et aucune des instructions n’aurait été validée.

Étant donné qu’il n’est pas toujours clair si la transaction sera validée ou restaurée, il est essentiel d’ajouter la gestion des erreurs aux transactions.