我的数据库中有一个表,它基本上用作记录目标。我在我的SQL代码中使用以下代码模式:
BEGIN TRY
...
END TRY
BEGIN CATCH
INSERT INTO [dbo.errors] (...)
VALUES ( ERROR_PROCEDURE(), ERROR_NUMBER(), ERROR_MESSAGE(), ... )
END CATCH
总而言之,一些代码必须在执行事务时执行。我发现没有任何东西写入日志,因为事务回滚也会回滚错误日志条目。有什么可以做的吗?
编辑:我确实知道如何通过在INSERT记录之前进行回滚/提交来解决问题。我的问题是,如果有一种已知的方法来插入数据,那么它就不会受到正在进行的事务的影响。例如:如果我使用单独的连接插入它,则可以完成。只有我想在单个SQL语句中找到完成它的方法EDIT2:澄清:这是关于Microsoft SQL
答案 0 :(得分:1)
如果你真的想避免使用交易,here's你可以尝试一种技巧。它是局部变量的变体。
答案 1 :(得分:0)
在CATCH块中,事务以特殊方式运行。你应该总是检查XACT_STATE()。如果事务注定失败(状态-1),则不允许执行任何写入操作,例如插入日志表。
答案 2 :(得分:-1)
我不确定你使用的是什么数据库,但在MySQL(我认为)你可以使用不支持事务的表(MyISAM)。由于该表不支持事务,因此它只是即时输入信息。