Sql Server嵌套事务回滚@@TRANCOUNT
我有一个存储过程,它开始一个新的数据处理事务。过程本身在另一个事务中执行。 我对手术前发生的事情没有任何影响。它可能会改变 我的想法是在开始嵌套事务之前检查@TRANCOUNT。然后在catch块中再次检查@tracount并进行比较。在任何情况下,我都不希望回滚外部事务。所以我想知道我使用这个密码是否安全 谢谢你的帮助Sql Server嵌套事务回滚@@TRANCOUNT,sql,sql-server,stored-procedures,transactions,nested,Sql,Sql Server,Stored Procedures,Transactions,Nested,我有一个存储过程,它开始一个新的数据处理事务。过程本身在另一个事务中执行。 我对手术前发生的事情没有任何影响。它可能会改变 我的想法是在开始嵌套事务之前检查@TRANCOUNT。然后在catch块中再次检查@tracount并进行比较。在任何情况下,我都不希望回滚外部事务。所以我想知道我使用这个密码是否安全 谢谢你的帮助 SET @TRANSCOUNTBEFORE = @@TRANCOUNT; BEGIN TRANSACTION tx; BEGIN TRY /* some data man
SET @TRANSCOUNTBEFORE = @@TRANCOUNT;
BEGIN TRANSACTION tx;
BEGIN TRY
/* some data manipulation here */
COMMIT TRANSACTION tx;
END TRY
BEGIN CATCH
IF @@TRANCOUNT > @TRANSCOUNTBEFORE ROLLBACK TRANSACTION tx;
/* some error handling here */
END CATCH;
看看文档:SQL Server中没有嵌套或自治事务;您的回滚将影响当前范围内的所有活动事务,无论您的级别有多深。你能做到这一点的唯一方法,我甚至没有测试过,我也不建议你离开SQL Server进程,例如SQLCLR,在一个新进程中启动一个不同的事务。哦,我看到了回滚…事务名称只能指最外层事务的事务名称谢谢。因此,我必须在另一个事件中执行该过程,以确保没有其他打开的事务。