НачатьНачать бесплатно

Откат транзакции при возникновении ошибки

В первый рабочий день вам поручили настроить транзакции, которые фиксируют переводы денег в вашем банке.

Вы хотите написать простой скрипт, в котором $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
Редактировать и запускать код