我想在不尝试catch的情况下使用事务。但我不知道分配回滚。以下声明始终是提交。请帮我。 @@错误可以捕获一个错误。所以,我不想使用它。
BEGIN TRANSACTION
INSERT Person values (@name,@age);
INSERT User values (@name,@age);
IF @@TRANCOUNT>0
COMMIT TRANSACTION
ELSE
ROLLBACK TRANSACTION
答案 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