INSERT数据忽略当前事务

时间:2009-11-25 20:47:42

标签: sql sql-server error-handling transactions

我的数据库中有一个表,它基本上用作记录目标。我在我的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

3 个答案:

答案 0 :(得分:1)

如果你真的想避免使用交易,here's你可以尝试一种技巧。它是局部变量的变体。

答案 1 :(得分:0)

在CATCH块中,事务以特殊方式运行。你应该总是检查XACT_STATE()。如果事务注定失败(状态-1),则不允许执行任何写入操作,例如插入日志表。

答案 2 :(得分:-1)

我不确定你使用的是什么数据库,但在MySQL(我认为)你可以使用不支持事务的表(MyISAM)。由于该表不支持事务,因此它只是即时输入信息。