关于TransactionScope和存储过程的问题
在记录网站财务流通日志时,会出现下面的情况:
表A记录操作流水记录,表B更新用户统计状态:
首先insert A,然后update B,之间出现任何问题,必须回滚以确保数据正确性。
于是用到事务来管理:
using (TransactionScope t = new TransactionScope())
{
...
inerst A;
...
update B;
...
t.Complete();
}
现有一个问题,在 update B中,是采用的存储过程,如下:
UPDATE
B
SET
.....
WHERE [ID] = @ID
IF @@ERROR != 0 OR @@ROWCOUNT = 0 --(*)
SET @ID = -1
最后返回@ID参数作为output。
如果update B出现问题,上面的事务是否会继续走完,关键是加(*)这一句,它是继续往下执行SQL操作,还是通知事务发生了错误,中断当前操作,这点不清楚。如果SQL语句继续往下走,可能导致insert A成功,update B失败,但没有回滚操作...
---------------------------
欢迎探讨跟事务相关的内容 :)