Annuler une transaction en cas d'erreur
Lors de votre première journée de travail, on vous a confié la tâche de mettre en place des transactions qui enregistrent les virements d'argent dans votre banque.
Vous voulez préparer un petit script où 100 $ sont transférés de account_id = 1 vers account_id = 5. Ensuite, il consigne ces mouvements dans la table transactions. Vous pensez avoir tout écrit correctement, mais par prudence, vous préférez tout vérifier!
En fait, vous avez bel et bien fait une erreur. Au lieu d'insérer une nouvelle transaction pour le compte 5, vous l'avez fait pour le compte 500, qui n'existe pas.
Pour éviter de futures erreurs, le script que vous créez doit effectuer un rollback de chaque modification si une erreur survient. Si tout se passe bien, la transaction doit être validée (committed).
Cette activité fait partie du cours
Transactions et gestion des erreurs dans SQL Server
Instructions de l’exercice
- Commencez la transaction.
- Corrigez l'erreur dans l'opération.
- Validez la transaction s'il n'y a pas d'erreurs.
- Dans le bloc
CATCH, annulez (roll back) la transaction.
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
BEGIN TRY
-- Begin the transaction
BEGIN ___;
UPDATE accounts SET current_balance = current_balance - 100 WHERE account_id = 1;
INSERT INTO transactions VALUES (1, -100, GETDATE());
UPDATE accounts SET current_balance = current_balance + 100 WHERE account_id = 5;
-- Correct it
INSERT INTO transactions VALUES (500, 100, GETDATE());
-- Commit the transaction
___ TRAN;
END TRY
BEGIN CATCH
SELECT 'Rolling back the transaction';
-- Rollback the transaction
___ ___;
END CATCH