开始使用免费开始使用

出现错误时回滚事务

入职第一天,您接到了一个任务:为银行的转账操作设置事务记录。

您想先准备一个简单脚本:从 account_id = 1 转出 $100,转入到 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
编辑并运行代码