1.背景:
在用arcmap导入shp数据到数据库的时候,发布服务后服务查询400,querycode 失败,日志查看报错截图入下:
2.原因:
经排除并不是数据库环境问题而是关于数据转换的原因,
默认情况下,在将数字转换为较低精度和小数位数的 decimal 或 numeric 值时,SQL Server 使用舍入法。然而,如果 SET ARITHABORT 选项为 ON,当发生溢出时,SQL Server 会出现错误;
从 decimal 或 numeric 向 float 或 real 转换会导致精度损失。从 int、smallint、tinyint、float、real、money 或 smallmoney 向 decimal 或 numeric 转换会导致溢出
numeric这个的精度低 所以才会报错
如:在arcmap或者shp中原本类型为双精度类型如下图所示
导入数据库后会变为numeric类型,发生转换时进度缺失
最终用numeric类型的数据发服务的时候可能会报错
3.解决办法:
只需要把数据库里面的numeric类型字段改为 float类型即可
修改后保存不了时,点击工具--选项---更改时间和阻止保存要求重新创建表的更改
保存后,重新查询即可成功,不需要重新发布服务
4.总结,所有的bug都是有哈数的,存在既有原因,需要耐心找出原因
将不定期更新资源,欢迎持续关注
想获得更多的学习知识请关注微信公众号:西北码农或扫下方二维码