首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >事务内的TSQL日志记录

事务内的TSQL日志记录
EN

Stack Overflow用户
提问于 2010-11-16 23:35:59
回答 4查看 10.5K关注 0票数 17

我正在尝试写入事务内的日志文件,以便即使事务回滚,日志也会继续存在。

--开始代码

开始交易

在dbo.logtable中插入某些内容

[此处提供主代码]

回滚

提交

--结束代码

您可以说只在事务开始之前做日志,但这并不容易,因为事务在S-Proc运行之前就开始了(即代码是更大事务的一部分)

因此,简而言之,有没有一种方法可以在不属于事务的事务中编写特殊语句。我希望我的问题是有意义的。

EN

回答 4

Stack Overflow用户

发布于 2010-11-16 23:42:59

使用表变量(@temp)保存日志信息。表变量在事务回滚后仍然有效。

参见this article

票数 13
EN

Stack Overflow用户

发布于 2010-11-16 23:43:04

根据我当时的需要,我会选择两种方式之一。这两种方法都涉及到使用变量,该变量在回滚后保留它们的值。

1)创建一个log值并使用这个:@ DECLARE @Log varchar(max) @Log=ISNULL(@Log+';','')+'Your new log info here'. Keep appending to this as you go through the transaction. I'll insert this into the log after the commit or the rollback as necessary. I'll usually only insert the @Log value into the real log table when there is an error (in theCATCH`块)或者如果我试图调试一个问题。

2)创建DECLARE @LogTable table (RowID int identity(1,1) primary key, RowValue varchar(5000)。我在你的事务处理过程中插入到这个代码中。我喜欢使用OUTPUT子句将事务中使用的行的实际ID(以及其他带有消息的列,如'DELETE item1234‘)插入到此表中。如果需要,我将在提交或回滚之后将该表插入到实际的日志表中。

票数 2
EN

Stack Overflow用户

发布于 2010-11-16 23:46:01

如果父事务回滚,日志记录数据也将回滚- SQL server不支持正确的嵌套事务。一种可能性是使用CLR存储过程来执行日志记录。这可以在事务外部打开自己与数据库的连接,并输入和提交日志数据。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4195844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档