. net +SQL Server 2005 -如何回滚事务但保留日志

本文关键字:回滚事务 保留 日志 +SQL Server 2005 net | 更新日期: 2023-09-27 18:03:16

我们有一个系统,它同时具有。net和SQLServer组件。. net组件负责启动进程,并将对存储过程的调用包含在事务中。

这个过程主要使用数据库上的存储过程来完成,这些存储过程都写到我们自己的日志表中。

现在的问题是,在. net代码中启动的事务将包含数据库代码中使用的所有其他事务,如果其中一个子事务回滚日志表就会消失。

是否有办法保留日志,回滚其他所有内容?

. net +SQL Server 2005 -如何回滚事务但保留日志

使用一个表变量来存储错误:这不受事务的影响

或者在错误

之后隐式回滚并记录的进程中使用SET XACT_ABORT ON

交易保存点可以帮助你吗?

这就是数据库级别的解决方案:

保存点提供了回滚部分事务的机制。使用SAVE TRANSACTION savepoint_name创建一个保存点声明。稍后,执行ROLLBACK TRANSACTION savepoint_name语句回滚到保存点,而不是回滚到事务开始。

  • 完整描述见这里:事务保存点。
  • 也看到好的(对我来说)存储过程模板的一个例子

也可以参考SqlTransaction。 c#解决方案的保存方法,希望这正是你正在寻找的:

在事务中创建一个保存点,该保存点可用于回滚事务的一部分,并指定保存点名称。