Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 要回滚的SQL语句,但要提交的审核插入_Sql Server_Sql Server 2012_Transactions - Fatal编程技术网

Sql server 要回滚的SQL语句,但要提交的审核插入

Sql server 要回滚的SQL语句,但要提交的审核插入,sql-server,sql-server-2012,transactions,Sql Server,Sql Server 2012,Transactions,SQL Server 2012 我有一个主存储过程,它调用其他几个“子”存储过程。 主进程将子进程封装在事务中 在整个主进程和子进程中,有许多插入到审计表中 如果过程成功,我会得到一个详细的事件链。如果进程失败并回滚,我希望在审计表中有最后一个子进程的记录,但是整个过程都回滚了,包括审计数据。是否有一种方法可以在回滚子进程更改时有选择地提交审计插入 谢谢这几乎是一个“不”。事务中对表所做的所有工作(插入、更新、删除)要么全有,要么全无 一个笨拙的手动选项是跟踪在一个或多个变量中处理的数据,在过程

SQL Server 2012

我有一个主存储过程,它调用其他几个“子”存储过程。 主进程将子进程封装在事务中

在整个主进程和子进程中,有许多插入到审计表中

如果过程成功,我会得到一个详细的事件链。如果进程失败并回滚,我希望在审计表中有最后一个子进程的记录,但是整个过程都回滚了,包括审计数据。是否有一种方法可以在回滚子进程更改时有选择地提交审计插入

谢谢

这几乎是一个“不”。事务中对表所做的所有工作(插入、更新、删除)要么全有,要么全无

一个笨拙的手动选项是跟踪在一个或多个变量中处理的数据,在过程之间来回传递它们。如果一切都已提交,则忽略变量;如果你不得不回退,你可以挖掘出你不想让他们知道的数据。

这几乎是一个“不”。事务中对表所做的所有工作(插入、更新、删除)要么全有,要么全无


一个笨拙的手动选项是跟踪在一个或多个变量中处理的数据,在过程之间来回传递它们。如果一切都已提交,则忽略变量;如果必须回滚,您可以从中挖掘您想要保留的数据。

您可以尝试在主过程中使用表变量,并将每个子过程的返回代码插入表变量。表变量不受事务的影响,而临时表受事务的影响


在主过程结束时,您可以从表变量中选择以返回子过程的结果。

您可以尝试在主过程中使用表变量,并将每个子过程的返回代码插入表变量中。表变量不受事务的影响,而临时表受事务的影响


在主过程结束时,您可以从表变量中选择以返回子过程的结果。

一种令人印象深刻但功能强大的方法是,在顺序执行时,将要更新审核日志的所有SQL语句存储在varchar(max)@变量中。如果进程失败并回滚,您可以通过变量中的SQL和错误跟踪数据中的任何信息查看失败的位置,并适当更新日志。这甚至可以让您查看回滚的日志信息,而不需要数据。这是一个混乱和可怕的痛苦,但如果实现得好,它是准确的。一个令人印象深刻的笨拙但功能强大的方法是,在顺序执行时,将更新审计日志的所有SQL语句存储在varchar(max)@变量中。如果进程失败并回滚,您可以通过变量中的SQL和错误跟踪数据中的任何信息查看失败的位置,并适当更新日志。这甚至可以让您查看回滚的日志信息,而不需要数据。这是一个混乱和可怕的痛苦,但它是准确的,当实施良好。