在 TRY...CATCH 结构中检查 @@TRANCOUNT
账户 10 的持有人在抽奖中获奖,将获得 $200。您准备了一个简单脚本,把这 $200 加到账户 10 的 current_balance 上。您认为自己都写对了,但还是想先检查一下代码。
事实上,您在加钱时犯了一个低级错误:SET current_balance = 'current_balance' + 200。您把 'current_balance' 写成了字符串,从而导致报错。
您编写的脚本应在发生错误时回滚所有更改,并检查当前是否有打开的事务。若一切正常,则应提交该事务,同样需要检查当前是否有打开的事务。
本练习是课程的一部分
SQL Server 中的事务与错误处理
练习说明
- 开启事务。
- 纠正运算中的错误。
- 在
TRY代码块内,检查是否存在事务并提交它。 - 在
CATCH代码块内,检查是否存在事务并将其回滚。
交互式实操练习
通过完成这段示例代码来试试这个练习。
BEGIN TRY
-- Begin the transaction
___ ___;
-- Correct the mistake
UPDATE accounts SET current_balance = 'current_balance' + 200
WHERE account_id = 10;
-- Check if there is a transaction
IF ___ > 0
-- Commit the transaction
___ ___;
SELECT * FROM accounts
WHERE account_id = 10;
END TRY
BEGIN CATCH
SELECT 'Rolling back the transaction';
-- Check if there is a transaction
IF ___ > 0
-- Rollback the transaction
___ ___;
END CATCH