在ROLLBACK中提交SQL事务

时间:2016-08-23 04:23:07

标签: sql sql-server tsql transactions

我已使用TRY CATCH创建了存储过程。在CATCH部分,我正在执行另一个存储过程以在表Error_Details中存储错误。

现在在C#中,我使用DbTransaction提交和回滚取决于错误。

问题是,虽然回滚更改表Error_Details也会回滚。

是否有任何选项可以回滚所有内容而不是Error_Details表?

1 个答案:

答案 0 :(得分:0)

使用存储过程本身内的事务。 请参阅下面的一个示例。

BEGIN TRY

  BEGIN TRANSACTION MyActivity

   -- Your SQL COMMANDS

 COMMIT TRANSACTION MyActivity
END TRY

BEGIN CATCH 
  IF (@@TRANCOUNT > 0)
   BEGIN
      ROLLBACK TRANSACTION MyActivity    
   END 
    INSERT INTO ERROR_DETAILS --INSERTING ErrorInfo INTO LOG TABLE
    SELECT
        ERROR_NUMBER() AS ErrorNumber,
        ERROR_SEVERITY() AS ErrorSeverity,
        ERROR_STATE() AS ErrorState,
        ERROR_PROCEDURE() AS ErrorProcedure,
        ERROR_LINE() AS ErrorLine,
        ERROR_MESSAGE() AS ErrorMessage
END CATCH