Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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 Server中创建不受事务回滚影响的审核表_Sql Server_Sql Server 2005_Tsql_Transactions - Fatal编程技术网

Sql server 在SQL Server中创建不受事务回滚影响的审核表

Sql server 在SQL Server中创建不受事务回滚影响的审核表,sql-server,sql-server-2005,tsql,transactions,Sql Server,Sql Server 2005,Tsql,Transactions,我是SQL新手。我的生产数据库中有大量存储过程。我计划编写一个审计表,这些存储过程将使用它来跟踪更改(这些存储过程将写入此审计表)。但问题是,当事务回滚时,插入审计表的行也会回滚。有没有办法创建不受事务回滚影响的表。欢迎任何其他满足我要求的想法 不能,一旦会话启动事务,该会话上的所有活动都包含在事务中 您可以做的是打开一个不同的会话,例如一个CLR过程,该过程作为普通客户端连接(不使用上下文连接)并从此连接进行审核 但是回滚的审核操作有点不寻常,因为您正在从数据库的角度审核从未发生过的事情,并且

我是SQL新手。我的生产数据库中有大量存储过程。我计划编写一个审计表,这些存储过程将使用它来跟踪更改(这些存储过程将写入此审计表)。但问题是,当事务回滚时,插入审计表的行也会回滚。有没有办法创建不受事务回滚影响的表。欢迎任何其他满足我要求的想法

不能,一旦会话启动事务,该会话上的所有活动都包含在事务中

您可以做的是打开一个不同的会话,例如一个CLR过程,该过程作为普通客户端连接(不使用上下文连接)并从此连接进行审核


但是回滚的审核操作有点不寻常,因为您正在从数据库的角度审核从未发生过的事情,并且审核记录和实际数据库状态将发生冲突。

您不能这样做,一旦会话启动事务,该会话上的所有活动都包含在事务中

您可以做的是打开一个不同的会话,例如一个CLR过程,该过程作为普通客户端连接(不使用上下文连接)并从此连接进行审核


但是回滚的审核操作有点不寻常,因为您正在从数据库角度审核从未发生过的事情,并且审核记录和实际数据库状态将发生冲突。

如果您想知道回滚了什么,请执行以下操作:

让您现有的审核流程处理成功的插入

将insert的值放入sp中的表变量中。重要的是,它是表变量,而不是临时表。现在在事务的catch块中执行回滚。这将不会清除表变量。然后将表变量中的值插入到审计表中(在audt表中添加一个字段,以便您可以将记录标记为回滚,并可能为错误消息添加一个字段)


我们并不是专门为审核而这样做的,但我们这样做是为了记录错误。

好的,如果您想知道回滚了什么,这里是您要做的:

让您现有的审核流程处理成功的插入

将insert的值放入sp中的表变量中。重要的是,它是表变量,而不是临时表。现在在事务的catch块中执行回滚。这将不会清除表变量。然后将表变量中的值插入到审计表中(在audt表中添加一个字段,以便您可以将记录标记为回滚,并可能为错误消息添加一个字段)

我们并不是专门为审计而这样做的,但我们这样做是为了记录错误