【问题标题】:.NET+SQL Server 2005 - How to rollback transaction but keep the log.NET+SQL Server 2005 - 如何回滚事务但保留日志
【发布时间】:2011-07-22 15:13:45
【问题描述】:

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

该过程主要使用数据库上的存储过程完成,所有存储过程都写入我们自己的日志表。

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

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

提前致谢。

【问题讨论】:

    标签: c# .net sql-server-2005 logging transactions


    【解决方案1】:

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

    或者在隐式回滚的过程中使用 SET XACT_ABORT ON 并记录错误

    【讨论】:

    • 我没有忘记这一点,我会在测试您的解决方案后回复。
    【解决方案2】:

    Transaction SavePoints 可以帮助您吗?

    这正是数据库级解决方案

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

    您也可以参考SqlTransaction.Save 方法获取C# 解决方案,希望这正是您要寻找的:

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

    【讨论】:

    • 我没有忘记这一点,我会在测试您的解决方案后回复。
    猜你喜欢
    • 1970-01-01
    • 2010-12-18
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-14
    • 1970-01-01
    相关资源
    最近更新 更多