Sql Server嵌套事务回滚@@TRANCOUNT

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

我有一个存储过程,它开始一个新的数据处理事务。过程本身在另一个事务中执行。 我对手术前发生的事情没有任何影响。它可能会改变

我的想法是在开始嵌套事务之前检查@TRANCOUNT。然后在catch块中再次检查@tracount并进行比较。在任何情况下,我都不希望回滚外部事务。所以我想知道我使用这个密码是否安全

谢谢你的帮助

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,在一个新进程中启动一个不同的事务。哦,我看到了回滚…事务名称只能指最外层事务的事务名称谢谢。因此,我必须在另一个事件中执行该过程,以确保没有其他打开的事务。