首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >存储过程中的错误:当前事务无法完成,也不能支持写入日志文件的操作。

存储过程中的错误:当前事务无法完成,也不能支持写入日志文件的操作。
EN

Stack Overflow用户
提问于 2012-12-19 10:35:04
回答 1查看 32.3K关注 0票数 3

错误信息是:

当前事务无法提交,也不能支持写入日志文件的操作。回退交易。

这里的这个部分会导致一个错误(一旦我将SELECT子句注释掉,所有操作都会顺利进行)。

代码语言:javascript
运行
复制
    DECLARE @TSV_Target_Counter INT
    DECLARE @TargetTable nvarchar(255)
    DECLARE @TargetColumn nvarchar(255)
    DECLARE @Value nvarchar(4000)
    DECLARE @SQLSTR nvarchar(4000)

    SET @TSV_Target_Counter = ( SELECT MIN(Transition_Set_Variable_ID) 
                                FROM @TSV_WithTarget )
    SET @TargetTable = ( SELECT TargetTable 
                            FROM @TSV_WithTarget
                            WHERE Transition_Set_Variable_ID = @TSV_Target_Counter )
    SET @TargetColumn = ( SELECT TargetColumn 
                            FROM @TSV_WithTarget
                            WHERE Transition_Set_Variable_ID = @TSV_Target_Counter )
    SET @Value = ( SELECT Value
                    FROM @TSV_WithTarget
                    WHERE Transition_Set_Variable_ID = @TSV_Target_Counter )

-- problem starts here

SELECT @SQLSTR = 'UPDATE Business_Partner AS BP 
                    INNER JOIN BP_Contact AS BPC ON BP.Business_Partner_ID = BPC.Business_Partner_ID 
                    INNER JOIN Due_Diligence AS DD ON BPC.BP_Contact_ID = DD.BP_Contact_ID 
                    SET' + @TargetColumn + ' = ' + @Value + ' 
                    WHERE DD.Process_Instance_ID = ' + @Process_Instance_ID

-- ends here

EXEC(@SQLSTR);

我做错了什么吗?我试图用这个事务来测试这个SP:

代码语言:javascript
运行
复制
BEGIN TRANSACTION T1
    EXEC Process_Instance_Value_AddAlter -- the name of the SP
    REVERT
ROLLBACK TRANSACTION T1
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-19 10:54:04

您是在未提交的上下文中操作的(又名。“注定”的交易。这意味着有更多您没有显示的代码,而且调用可能发生在CATCH块中。请参阅状态

如果在TRY块中生成的错误导致当前事务的状态无效,则事务被归类为不可提交的事务。通常在TRY块之外结束事务的错误会导致事务在TRY块内发生错误时进入不可提交状态。未提交的事务只能执行读操作或回滚事务。事务无法执行将生成写操作或提交事务的任何Transact-SQL语句。如果事务被归类为不可提交的事务,则XACT_STATE函数返回的值为-1。批处理完成后,数据库引擎将回滚任何活动的未提交事务。如果在事务进入不可提交状态时没有发送错误消息,则在批处理完成时,将向客户端应用程序发送错误消息。这表示检测到并回滚了未提交的事务。

修复非常简单:不要从不可提交的事务上下文调用过程。XACT_STATE() 总是在CATCH块中检查

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

https://stackoverflow.com/questions/13950402

复制
相关文章

相似问题

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