使用事务而不尝试catch

时间:2011-03-08 03:29:49

标签: stored-procedures

我想在不尝试catch的情况下使用事务。但我不知道分配回滚。以下声明始终是提交。请帮我。 @@错误可以捕获一个错误。所以,我不想使用它。

BEGIN TRANSACTION

     INSERT Person values (@name,@age);
     INSERT User values (@name,@age);

IF @@TRANCOUNT>0
     COMMIT TRANSACTION
ELSE
     ROLLBACK TRANSACTION

3 个答案:

答案 0 :(得分:0)

只要您BEGIN TRANSACTION@@TRANCOUNT就会递增。

因为你确实增加了一次,那么总是>0

您可能需要检查IF ( @@ERROR > 0 ) ROLLBACK TRAN

此外,我鼓励您使用命名交易,以便您知道您正在回滚正确的交易(如果没有其他原因而不是可追溯性)

答案 1 :(得分:0)

@@ Error只捕获最后一个语句错误代码,但是如果你在每个insert语句之后检查 - 我认为你已经达到了预期的行为。

BEGIN TRANSACTION

 INSERT Person values (@name,@age);

IF (@@ERROR <> 0) BEGIN
    PRINT 'Unexpected error occurred!'
    ROLLBACK TRAN
    RETURN 1
END

 INSERT User values (@name,@age);

IF (@@ERROR <> 0) BEGIN
    PRINT 'Unexpected error occurred!'
    ROLLBACK TRAN
    RETURN 1
END

 COMMIT TRANSACTION

答案 2 :(得分:-1)

BEGIN TRANSACTION

     INSERT Person values (@name,@age);
     INSERT User values (@name,@age);

IF @@ERROR == 0
     COMMIT TRANSACTION
ELSE
     ROLLBACK TRANSACTION