报错:The statement has been terminated的一种情形分析和解决方案原创
8人赞赏了该文章
5679次浏览
编辑于2021年01月09日 17:18:52
今天接到一例紧急反馈,二开单据打开生产工单列表,返回数据时报错:
刚接到反馈时,第一反应是字符串截断,可能是某个INSERT的SQL进行写入时,结果表的字段长度不足所致;
因此马上打开SQL Server Profilers进行跟踪,发现是停止在某个存储过程的执行上,同时从报错堆栈分析,也指向了二开插件的方法,因此联系客户方开发检查代码。
但随后接到客户方的反馈却是,生产环境恢复到本地测试时,竟然没有问题;因此从头再来审视这个问题,发现了些不对劲:问题报错是字符串格式字段转换为日期字段的格式转换错误问题,但是和客户方一起检查发现代码没有问题,而且该问题还存在特定环境下报错的情形,因此联想到可能和数据库本身有关,转身就向搜索引擎求助。
发现搜索引擎返回第一条记录就和上述问题吻合,存储过程调用日期时报错:【存储过程StoredProcedure中调用的日期模式似乎并不取决于系统的默认语言,而取决于数据库的版本语言】
同时文中也提供了解决方案,修改设定登录默认语言:
USE MASTER EXEC SP_DEFAULTLANGUAGE 'sa', 'Simplified Chinese'
不过刚好客户是公有云环境,需要在master下执行,协调处理一番来验证,果然妥了,就此问题解决。
总结:问题报错永远层出不穷,前辈的经验是个宝,善用搜索引擎是良药。
参考链接:https://blog.csdn.net/batman9956/article/details/17737219
推荐阅读