Відкат транзакції у разі помилки
У ваш перший робочий день вам доручили налаштувати транзакції, які фіксують перекази коштів у вашому банку.
Ви хочете підготувати простий скрипт, де $100 переказується з account_id = 1 на account_id = 5. Після цього рухи мають бути зареєстровані в таблиці transactions. Ви впевнені, що все написали правильно, але як обачна людина хочете все перевірити!
Насправді ви припустилися помилки. Замість того щоб додати нову транзакцію для рахунку 5, ви зробили це для рахунку 500, якого не існує.
Щоб запобігти таким помилкам у майбутньому, створений вами скрипт має виконувати rollback усіх змін у разі помилки. Якщо все відбудеться коректно, транзакцію слід зафіксувати (commit).
Ця вправа є частиною курсу
Транзакції та обробка помилок у SQL Server
Інструкції до вправи
- Почніть транзакцію.
- Виправте помилку в операції.
- Зафіксуйте транзакцію, якщо немає помилок.
- Усередині блоку
CATCHвиконайте відкат транзакції.
Інтерактивна практична вправа
Спробуйте виконати цю вправу, доповнивши цей зразок коду.
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