事故的效果
begin try
begin tran
If @RowCnt1 > 0
Begin
Update EnergyDataSumByYearN Set SumQty = SumQty + @Qty
Where MeterNo = @MeterNo And MeterType = @MeterType And DAYear = @DAYear ;
End
Else
Begin
Insert EnergyDataSumByYearN(MeterNo,MeterType,DAYear,SumQty,Unit)
Select @MeterNo,@MeterType,@DAYear,@Qty,@Unit;
End
If @RowCnt2 > 0
Begin
Update EnergyDataSumByMonthN Set SumQty = SumQty + @Qty
Where MeterNo = @MeterNo And MeterType = @MeterType And DAYear = @DAYear And DAMonth = @DAMonth;
End
Else
Begin
Insert EnergyDataSumByMonthN(MeterNo,MeterType,DAYear,DAMonth,SumQty,Unit)
Select @MeterNo,@MeterType,@DAYear,@DAMonth,@Qty,@Unit;
End
If @RowCnt3 > 0
Begin
Update EnergyDataSumByDayN Set SumQty = SumQty + @Qty
Where MeterNo = @MeterNo And MeterType = @MeterType And DAYear = @DAYear And DAMonth = @DAMonth And DADay = @DADay;
End
Else
Begin
Insert EnergyDataSumByDayN(MeterNo,MeterType,DAYear,DAMonth,DADay,SumQty,Unit)
Select @MeterNo,@MeterType,@DAYear,@DAMonth,@DADay,@Qty,@Unit;
End
If @RowCnt4 > 0
Begin
Update EnergyDataSumByHourN Set SumQty = SumQty + @Qty
Where MeterNo = @MeterNo And MeterType = @MeterType And DADay = IsNull(@DAYear,'') + IsNull(@DAMonth,'') + IsNull(@DADay,'')
And DAHour = @DAHour ;
End
Else
Begin
Insert EnergyDataSumByHourN(MeterNo,MeterType,DADay,DAHour,SumQty,Unit)
Select @MeterNo,@MeterType,IsNull(@DAYear,'') + IsNull(@DAMonth,'') + IsNull(@DADay,''),@DAHour,@Qty,@Unit;
End
--Exec Usp_TransferDAListToEnergyData @MeterNo,@MeterType,@DATime,@Qty,@Unit
end try
begin catch
rollback tran --处理失败 数据回滚
end catch
问题:这个事故过程是,如果这里的几个“Insert”和“Update”方法,有一个执行不成功,那么就整个数据库回滚对吧???
大师,请您看下,这些代码有没有问题。
[解决办法]
是的 一条有问题就会全部回滚……
[解决办法]
我记得以前跟你说过的,是事务,不是事故。事务不一定会锁表,但是会加锁,但是可能是行锁、页锁。隔离级别可以粗略理解为加锁的范围和并发性的程度。事务应该包含一个完整的操作逻辑,而不能单单理解为越短越好,但是当然短的事务的确很有好处。
[解决办法]
up!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
------解决方案--------------------
代码当然有问题,你少了个 commit tran
