出现错误时回滚事务
入职第一天,您接到了一个任务:为银行的转账操作设置事务记录。
您想先准备一个简单脚本:从 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