Откат транзакции при возникновении ошибки
В первый рабочий день вам поручили настроить транзакции, которые фиксируют переводы денег в вашем банке.
Вы хотите написать простой скрипт, в котором $100 списывается со счёта account_id = 1 и зачисляется на счёт account_id = 5. После этого эти операции регистрируются в таблице transactions. Вы думали, что всё написано верно, но как осторожный сотрудник решили проверить ещё раз!
Оказывается, ошибка всё же есть. Вместо того чтобы добавить запись для счёта 5, вы сделали это для счёта 500, которого не существует.
Чтобы избежать подобных ошибок в будущем, скрипт должен откатывать все изменения при возникновении ошибки. Если всё прошло успешно, транзакция должна быть зафиксирована.
Это упражнение является частью курса
Транзакции и обработка ошибок в 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