ROLLBACK TRANSACTION (Transact-SQL)

Annule une transaction implicite ou explicite jusqu'au début de la transaction ou jusqu'au dernier point d'enregistrement à l'intérieur de la transaction.

Syntaxe

ROLLBACK { TRAN | TRANSACTION } 
     [ transaction_name | @tran_name_variable
     | savepoint_name | @savepoint_variable ] 
[ ; ]

Arguments

  • transaction_name
    Nom attribué à la transaction dans BEGIN TRANSACTION. transaction_name doit respecter les règles applicables aux identificateurs, mais seuls les 32 premiers caractères du nom de la transaction sont utilisés. En cas d'imbrication des transactions, transaction_name doit correspondre au nom figurant dans l'instruction BEGIN TRANSACTION la plus extérieure.
  • **@**tran_name_variable
    Nom d'une variable définie par l'utilisateur et contenant un nom de transaction valide. La variable doit être déclarée avec un type de données char, varchar, nchar ou nvarchar.
  • savepoint_name
    Paramètre savepoint_name issu d'une instruction SAVE TRANSACTION. savepoint_name doit être conforme aux règles applicables aux identificateurs. Employez savepoint_name lorsqu'une opération d'annulation conditionnelle ne doit affecter qu'une partie de la transaction.
  • **@**savepoint_variable
    Nom d'une variable définie par l'utilisateur et contenant un nom de point d'enregistrement valide. La variable doit être déclarée avec un type de données char, varchar, nchar ou nvarchar.

Notes

ROLLBACK TRANSACTION efface toutes les modifications de données effectuées depuis le début de la transaction ou à partir d'un point d'enregistrement. Elle libère également les ressources bloquées par la transaction.

Si vous ne spécifiez ni savepoint_name ni transaction_name dans l'instruction ROLLBACK TRANSACTION, l'annulation sera effectuée à partir du début de la transaction. En cas d'imbrication des transactions, cette même instruction annule toutes les transactions internes jusqu'à l'instruction BEGIN TRANSACTION la plus extérieure. Dans les deux cas, ROLLBACK TRANSACTION ramène à 0 la fonction système @@TRANCOUNT. En revanche, ROLLBACK TRANSACTION savepoint_name ne décrémente pas @@TRANCOUNT.

Une instruction ROLLBACK TRANSACTION spécifiant savepoint_name libère tous les verrous acquis au-delà du point d'enregistrement, à l'exception des promotions et des conversions. Ces verrous ne sont pas libérés et ne sont pas reconvertis dans leur ancien mode de verrouillage.

ROLLBACK TRANSACTION ne peut pas faire référence à un attribut savepoint_name dans les transactions distribuées qui sont lancées soit explicitement avec BEGIN DISTRIBUTED TRANSACTION soit découlant d'une transaction locale.

Une transaction ne peut pas être annulée après l'exécution d'une instruction COMMIT TRANSACTION.

Dans une transaction, les noms de point d'enregistrement dupliqués sont autorisés. Toutefois, une instruction ROLLBACK TRANSACTION contenant un nom de point d'enregistrement en double n'effectue l'annulation que jusqu'à l'instruction SAVE TRANSACTION la plus récente utilisant ce nom de point d'enregistrement.

Dans les procédures stockées, les instructions ROLLBACK TRANSACTION sans savepoint_name ni transaction_name annulent toutes les instructions jusqu'à l'instruction BEGIN TRANSACTION la plus extérieure. Une instruction ROLLBACK TRANSACTION dans une procédure stockée qui modifie la valeur de @@TRANCOUNT entre le moment où la procédure stockée se termine et celui où la procédure a été appelée, génère un message d'information. Ce message n'affecte pas la suite du traitement.

L'exécution d'une instruction ROLLBACK TRANSACTION dans un déclencheur a les conséquences suivantes :

  • toutes les modifications de données effectuées jusque là dans la transaction en cours sont annulées, y compris celles effectuées par le déclencheur ;
  • le déclencheur termine l'exécution des instructions qui suivent l'instruction ROLLBACK. Si l'une de ces instructions modifie les données, les modifications ne sont pas annulées. Aucun déclencheur imbriqué ne peut être activé par l'exécution de ces instructions ;
  • aucune instruction du lot suivant celle qui a activé le déclencheur n'est exécutée.

@@TRANCOUNT est incrémenté de un lorsqu'un déclencheur est entré, même en mode d'autovalidation. (Le système traite un déclencheur comme une transaction imbriquée implicite).

Les instructions ROLLBACK TRANSACTION contenues dans des procédures stockées n'affectent pas les instructions suivantes dans le lot d'instructions qui a appelé la procédure ; les instructions suivantes du lot sont exécutées. Les instructions ROLLBACK TRANSACTION figurant dans des déclencheurs terminent le lot contenant l'instruction qui a activé le déclencheur ; les instructions suivantes du lot ne sont pas exécutées.

Une instruction ROLLBACK TRANSACTION n'envoie aucun message à l'utilisateur. Si des avertissements sont nécessaires dans les procédures stockées ou les déclencheurs, utilisez les instructions RAISERROR ou PRINT. L'instruction RAISERROR est la mieux adaptée à l'indication des erreurs.

Les effets d'une instruction ROLLBACK sur les curseurs sont définies par les trois règles suivantes :

  1. avec CURSOR_CLOSE_ON_COMMIT à ON, ROLLBACK ferme tous les curseurs ouverts, sans les désallouer ;
  2. avec CURSOR_CLOSE_ON_COMMIT à OFF, ROLLBACK n'affecte ni les curseurs synchrones STATIC ou INSENSITIVE ouverts, ni les curseurs STATIC asynchrones entièrement remplis. Quel que soit leur type, les curseurs ouverts sont fermés mais pas désalloués ;
  3. une erreur qui termine un lot d'instructions et génère une annulation interne provoque la désallocation de tous les curseurs qui étaient déclarés dans le lot contenant l'instruction erronée. Tous les curseurs sont désalloués, quel que soit leur type ou le paramétrage de CURSOR_CLOSE_ON_COMMIT. Cela inclut les curseurs déclarés dans les procédures stockées appelées par le lot d'instructions qui a provoqué l'erreur. Les curseurs déclarés dans un lot précédant le lot erroné sont soumis aux règles 1 et 2. Un blocage est un exemple de ce type d'erreur. Une instruction ROLLBACK exécutée dans un déclencheur génère aussi automatiquement ce type d'erreur.

Autorisations

Nécessite l'appartenance au rôle public.

Voir aussi

Référence

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

Autres ressources

Contrôle des transactions (Moteur de base de données)
Restauration et validation de transactions dans les procédures stockées et les déclencheurs
Utilisation de déclencheurs DML contenant des instructions COMMIT ou ROLLBACK TRANSACTION
Verrouillage des curseurs

Aide et Informations

Assistance sur SQL Server 2005