我的数据库中有一个表,它本质上是一个日志记录目的地。我在我的SQL代码中通过以下代码模式使用它:
BEGIN TRY
...
END TRY
BEGIN CATCH
INSERT INTO [dbo.errors] (...)
VALUES ( ERROR_PROCEDURE(), ERROR_NUMBER(), ERROR_MESSAGE(), ... )
END CATCH长话短说,其中一些代码必须与事务一起执行。我发现日志中不会写入任何内容,因为事务回滚也会回滚错误日志条目。对此我们能做些什么?
编辑:我知道如何在插入日志之前进行回滚/提交。我的问题是,是否有一种已知的方法可以插入数据,使其不受正在进行的事务的影响。例如:如果我使用一个单独的连接插入它,就可以这样做。我只是想在一条SQL语句中找到这样做的方法
EDIT2:澄清:这是关于Microsoft SQL的
发布于 2009-12-16 14:01:56
如果你真的想避免使用事务,你可以尝试一下here's技术。它是局部变量的变体。
发布于 2009-11-26 06:44:02
在CATCH块中,事务以一种特殊的方式运行。您应该始终检查XACT_STATE()。如果事务注定失败(state -1),则不允许执行任何写操作,如插入到日志表中。
发布于 2010-06-29 00:24:40
我不确定您使用的是什么数据库,但在MySQL (我认为)中,您可以只使用不支持事务的表(MyISAM)。因为该表不支持事务,所以它只在运行时输入信息。
https://stackoverflow.com/questions/1799845
复制相似问题