@@TRANCOUNT controleren in een TRY...CATCH-constructie
De eigenaar van rekening 10 heeft een loterij gewonnen en krijgt $200. Je bereidt een eenvoudig script voor om die $200 toe te voegen aan de current_balance van rekening 10. Je denkt dat je alles goed hebt geschreven, maar je controleert je code toch liever.
Eigenlijk heb je een stomme fout gemaakt bij het toevoegen van het geld: SET current_balance = 'current_balance' + 200. Je hebt 'current_balance' als string geschreven, wat een fout veroorzaakt.
Het script dat je maakt moet alle wijzigingen terugdraaien (rollback) als er een fout optreedt, waarbij je controleert of er een open transactie is. Als alles goed gaat, moet de transactie worden vastgelegd (commit), ook nadat je hebt gecontroleerd of er een open transactie is.
Deze oefening maakt deel uit van de cursus
Transacties en foutafhandeling in SQL Server
Oefeninstructies
- Start de transactie.
- Corrigeer de fout in de bewerking.
- Controleer binnen het
TRY-blok of er een transactie is en bevestig (commit) deze. - Controleer binnen het
CATCH-blok of er een transactie is en draai deze terug (rollback).
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
BEGIN TRY
-- Begin the transaction
___ ___;
-- Correct the mistake
UPDATE accounts SET current_balance = 'current_balance' + 200
WHERE account_id = 10;
-- Check if there is a transaction
IF ___ > 0
-- Commit the transaction
___ ___;
SELECT * FROM accounts
WHERE account_id = 10;
END TRY
BEGIN CATCH
SELECT 'Rolling back the transaction';
-- Check if there is a transaction
IF ___ > 0
-- Rollback the transaction
___ ___;
END CATCH