报错:The statement has been terminated的一种情形分析和解决方案原创
金蝶云社区-汉堡
汉堡
8人赞赏了该文章 5679次浏览 未经作者许可,禁止转载编辑于2021年01月09日 17:18:52

今天接到一例紧急反馈,二开单据打开生产工单列表,返回数据时报错:


报错.png


刚接到反馈时,第一反应是字符串截断,可能是某个INSERT的SQL进行写入时,结果表的字段长度不足所致;

因此马上打开SQL Server Profilers进行跟踪,发现是停止在某个存储过程的执行上,同时从报错堆栈分析,也指向了二开插件的方法,因此联系客户方开发检查代码。


image.png


但随后接到客户方的反馈却是,生产环境恢复到本地测试时,竟然没有问题;因此从头再来审视这个问题,发现了些不对劲:问题报错是字符串格式字段转换为日期字段的格式转换错误问题,但是和客户方一起检查发现代码没有问题,而且该问题还存在特定环境下报错的情形,因此联想到可能和数据库本身有关,转身就向搜索引擎求助。


image.png


发现搜索引擎返回第一条记录就和上述问题吻合,存储过程调用日期时报错:【存储过程StoredProcedure中调用的日期模式似乎并不取决于系统的默认语言,而取决于数据库的版本语言】

同时文中也提供了解决方案,修改设定登录默认语言:


USE MASTER

EXEC SP_DEFAULTLANGUAGE  'sa',  'Simplified Chinese'


不过刚好客户是公有云环境,需要在master下执行,协调处理一番来验证,果然妥了,就此问题解决。



总结:问题报错永远层出不穷,前辈的经验是个宝,善用搜索引擎是良药。

参考链接:https://blog.csdn.net/batman9956/article/details/17737219


赞 8