错误信息是:
当前事务无法提交,也不能支持写入日志文件的操作。回退交易。
这里的这个部分会导致一个错误(一旦我将SELECT子句注释掉,所有操作都会顺利进行)。
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:
BEGIN TRANSACTION T1
EXEC Process_Instance_Value_AddAlter -- the name of the SP
REVERT
ROLLBACK TRANSACTION T1
发布于 2012-12-19 10:54:04
您是在未提交的上下文中操作的(又名。“注定”的交易。这意味着有更多您没有显示的代码,而且调用可能发生在CATCH块中。请参阅状态
如果在TRY块中生成的错误导致当前事务的状态无效,则事务被归类为不可提交的事务。通常在TRY块之外结束事务的错误会导致事务在TRY块内发生错误时进入不可提交状态。未提交的事务只能执行读操作或回滚事务。事务无法执行将生成写操作或提交事务的任何Transact-SQL语句。如果事务被归类为不可提交的事务,则XACT_STATE函数返回的值为-1。批处理完成后,数据库引擎将回滚任何活动的未提交事务。如果在事务进入不可提交状态时没有发送错误消息,则在批处理完成时,将向客户端应用程序发送错误消息。这表示检测到并回滚了未提交的事务。
修复非常简单:不要从不可提交的事务上下文调用过程。XACT_STATE()
总是在CATCH块中检查。
https://stackoverflow.com/questions/13950402
复制相似问题