SQL Server 2012
我有一个Master存储过程,它会调用其他几个孩子。存储过程。 master proc在事务中封装了子proc。
在整个主进程和子进程中,审计表中有许多插入。
如果流程成功,我会得到一系列详细的事件。如果进程失败并回滚,我希望记录在Audit表中处理的最后一个子进程,但整个事情都会回滚,包括审计数据。有没有办法在回滚子proc更改时有选择地提交审计插入?
由于
答案 0 :(得分:3)
这几乎是一个“不”。在事务中表上完成的所有工作(插入,更新,删除)都是全有或全无。
一个笨拙的手动选项是跟踪一个或多个变量中正在处理的数据,在程序之间来回传递它们。如果一切都已提交,请忽略变量;如果你必须回滚,你可以挖掘你想要保留的数据。
答案 1 :(得分:3)
您可以尝试在主过程中使用表变量,并将每个子过程的返回码插入表变量中。表变量不受事务影响,而临时表是。
在主程序结束时,您可以从表变量中选择以返回子程序的结果。