Stored procedures 使用不带try-catch的事务

Stored procedures 使用不带try-catch的事务,stored-procedures,Stored Procedures,我想在不使用try-catch的情况下使用事务。但我不知道如何分配回滚。下面的语句始终是commit。请帮帮我@@错误可以捕获一个错误。所以,我不想用这个 BEGIN TRANSACTION INSERT Person values (@name,@age); INSERT User values (@name,@age); IF @@TRANCOUNT>0 COMMIT TRANSACTION ELSE ROLLBACK TRANSACTION

我想在不使用try-catch的情况下使用事务。但我不知道如何分配回滚。下面的语句始终是commit。请帮帮我@@错误可以捕获一个错误。所以,我不想用这个

BEGIN TRANSACTION

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

IF @@TRANCOUNT>0
     COMMIT TRANSACTION
ELSE
     ROLLBACK TRANSACTION
无论何时开始事务,都会增加@TRANCOUNT

因为你只增加了一次,所以它总是>0

您可能想检查@@ERROR>0回滚传输


另外,我鼓励您使用命名事务,这样您就知道如果不是出于可跟踪性以外的原因,您回滚的事务是正确的,错误只捕获最后一个语句错误代码,但是如果您在每个insert语句之后进行检查,我想您会达到预期的行为

BEGIN TRANSACTION

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

IF @@ERROR == 0
     COMMIT TRANSACTION
ELSE
     ROLLBACK TRANSACTION
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

如果您有许多事务-您可以使用GOTO来减少复制/粘贴所需的代码量您是否仍然对@zahntet感到困惑,或者您是否终于明白了为什么@trancount始终高于零?