SQL Server 当前事务无法提交,而且无法支持写入日志文件的操作。
最近遇到一个向表插入数据时,抛出 “当前事务无法提交,而且无法支持写入日志文件的操作。”的异常, 详细如下;
此操作只是一个简单的insert操作, 经过排查原因是此表上有对应insert触发器。原因是 里面对应写有try catch,并且将设置了SET XACT_ABORT ON;
我们知道触发器本事就是一个事务,SET XACT_ABORT ON代表的意思是 程序如果遇到错误就回滚。如果在程序中没有try catch的情况下 就直接回滚了。但是如果有try catch的话,在 try块中出现了错误,被catch捕获以后。Xact_state()就会变成-1 。
Xact_state()是一个系统函数
0表示没有活动事务
1表示有活动事务并且可以提交
-1表示有活动事务
当Xact_state()=-1时存在活动事务,但是无法提交,换句话说就是只能rollback。所以在你提交的时候就会报错“当前事务无法提交,而且无法支持写入日志文件的操作。请回滚该事务。”
解决:
1、 在catch中对Xact_state()的值进行判断如果为-1的话 直接rollback
2、 如果在子存储过程中存在try catch的话 最好去掉 让错误往上一级抛出,由上一级做处理
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律