高手指点:嵌套事务回滚后如何在表中记录嵌套层的日志?(SQL SERVER)

librastar2001 2010-07-22 02:50:44
带事务的存储过程A在事务中调用另外一个带事务的存储过程B,在B中存在各种记录业务运行过程以及错误的语句(写日志表)。
但如果A回滚了,那么B的所有操作也回滚了,有没有什么办法让日志记录脱离事务的控制?
或者有其他什么巧妙的方法?
...全文
154 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xman_78tom 2010-07-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 librastar2001 的回复:]

我用的是sqlserver 2005,每个存储过程都建立了事务保存点

纠结中...
[/Quote]
嵌套调用的 t-sql 存储过程都处于一个事务作用域中。看样子只能写 clr 存储过程。
librastar2001 2010-07-22
  • 打赏
  • 举报
回复
我用的是sqlserver 2005,每个存储过程都建立了事务保存点

纠结中...
xman_78tom 2010-07-22
  • 打赏
  • 举报
回复
SQL Server 不像 oracle 一样支持 autonomous_transaction,但是有几种变通的方法:

其一,将存储过程 b 做成 clr 存储过程,事务回滚时不会影响 clr 存储过程。

其二,在 SQL Server 2008 中,可以通过使用 LOOPBACK 服务器链接,让嵌套事务拥有独立的事务作用域。
具体方法:
建立 LOOPBACK 服务器链接(EXEC sp_addlinkedserver @server = N'loopback',@srvproduct = N' ',@provider = N'SQLNCLI', @datasrc = @@SERVERNAME);
设置服务器链接选项,阻止 SQL Server 由于远程过程调用而将本地事务提升为分布事务(EXEC sp_serveroption loopback,N'remote proc transaction promotion','FALSE');
在嵌套事务中通过 LOOPBACK 服务器连接调用过程(EXEC loopback.dbname.dbo.proc)。
ChinaJiaBing 2010-07-22
  • 打赏
  • 举报
回复

创建事务保存点:SAVE TRANSACTION savepoint_name





永生天地 2010-07-22
  • 打赏
  • 举报
回复
[Quote=引用楼主 librastar2001 的回复:]
带事务的存储过程A在事务中调用另外一个带事务的存储过程B,在B中存在各种记录业务运行过程以及错误的语句(写日志表)。
但如果A回滚了,那么B的所有操作也回滚了,有没有什么办法让日志记录脱离事务的控制?
或者有其他什么巧妙的方法?
[/Quote]
添加事务保存点
王向飞 2010-07-22
  • 打赏
  • 举报
回复
等解释

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧