为什么我的一个事物中,出错后表给锁住了,不能访问了,代码如下,其中表aa为缺少的对象,即在这里会报错,但是执行完后表TABLE2就不能访问了,会被锁上,这是为什么,怎么在出错后自动解锁?BEGIN TRANSACTION aaa--开始事务 DECLARE @errorSun INT --定义错误计数器
SET @errorSun=0 --没错为0
--删除原来表中的数据
delete from TABLE2 --事务操作SQL语句
SET @errorSun=@errorSun+@@ERROR --累计是否有错
UPDATE aa SET id=2 WHERE a=1 --事务操作SQL语句
SET @errorSun=@errorSun+@@ERROR --累计是否有错
IF @errorSun<>0
BEGIN
PRINT '有错误,回滚'
ROLLBACK TRANSACTION aaa--事务回滚语句
return
END
ELSE
BEGIN
PRINT '成功,提交'
COMMIT TRANSACTION aaa--事务提交语句
return
END
SET @errorSun=0 --没错为0
--删除原来表中的数据
delete from TABLE2 --事务操作SQL语句
SET @errorSun=@errorSun+@@ERROR --累计是否有错
UPDATE aa SET id=2 WHERE a=1 --事务操作SQL语句
SET @errorSun=@errorSun+@@ERROR --累计是否有错
IF @errorSun<>0
BEGIN
PRINT '有错误,回滚'
ROLLBACK TRANSACTION aaa--事务回滚语句
return
END
ELSE
BEGIN
PRINT '成功,提交'
COMMIT TRANSACTION aaa--事务提交语句
return
END
@@ERROR 返回的结果正负都有, 所以你这样加可能导致正负抵销, 可以取绝对值再加
当然, 这个问题只影响你后面的事务处理部分是否选择了正确的路径.
BEGIN
PRINT '有错误,回滚'
ROLLBACK TRANSACTION aaa--事务回滚语句
return
END
ELSE
BEGIN
PRINT '成功,提交'
COMMIT TRANSACTION aaa--事务提交语句
return
END这些都没有执行到就异常中止了 事务也没提交也没回滚
--执行下面语句手工ROLLBACK
ROLLBACK TRANSACTION aaa
事务开始之前加入
SET XACT_ABORT ON
试验一下SET XACT_ABORT ONBEGIN TRANSACTION aaa--开始事务
应该是第一句错误后,马上跳转把错误处理,执行rollback tran语句