41  
查询码: 00000130
sqlserver存储过程报错:当前事务无法提交,而且无法支持写入日志文件的操作。请回滚该事务_小慧哥的博客-CSDN博客
来源:https://blog.csdn.net/q465162770/article/details/102802124
作者: 周杨 于 2022年07月19日 发布在分类 / 计算机应用 / 数据库 / SQLSERVER ,于 2022年07月19日 编辑
事务 过程 存储 sqlserver 提交 无法 一个 错误 如果

请仔细分析这句话 :

是普通的insert 语句,还是在存储过程中的insert语句呢?如果是存储过程中的语句,可能是因为:sqlserver存储过程报错:当前事务无法提交,而且无法支持写入日志文件的操作。请回滚该事务。
出现这个错误
代表是存储过程(或者调用的子存储过程)中含有try catch语句,并且将设置了SET XACT_ABORT ON;
SET XACT_ABORT ON代表的意思是 程序如果遇到错误就回滚。如果在程序中没有try catch的情况下 就直接回滚了。但是如果有try catch的话,在try块中出现了错误,被catch捕获以后。Xact_state()就会变成-1 (Xact_state()是一个系统函数 0表示没有活动事务,1表示有活动事务并且可以提交,-1表示有活动事务,但是无法提交换句话说就是只能rollback)
所以在你提交的时候就会报错“当前事务无法提交,而且无法支持写入日志文件的操作。请回滚该事务。”解决:1 在catch中对Xact_state()的值进行判断如果为-1的话 直接rollback
2 如果在子存储过程中存在try catch的话 最好去掉 让错误往上一级抛出,由上一级做处理




 历史版本

备注 修改日期 修改人
CREAT 2022-07-19 16:22:26[当前版本] 系统管理员

知识分享平台 -V 5.1.4 -大信谛威