关于 双精度字段类型导入sqlserver转为numeric类型报错原因及解决方案

1.背景:

    在用arcmap导入shp数据到数据库的时候,发布服务后服务查询400,querycode 失败,日志查看报错截图入下:

关于 双精度字段类型导入sqlserver转为numeric类型报错原因及解决方案

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中原本类型为双精度类型如下图所示


关于 双精度字段类型导入sqlserver转为numeric类型报错原因及解决方案

导入数据库后会变为numeric类型,发生转换时进度缺失

关于 双精度字段类型导入sqlserver转为numeric类型报错原因及解决方案

最终用numeric类型的数据发服务的时候可能会报错

3.解决办法:

只需要把数据库里面的numeric类型字段改为 float类型即可

关于 双精度字段类型导入sqlserver转为numeric类型报错原因及解决方案

修改后保存不了时,点击工具--选项---更改时间和阻止保存要求重新创建表的更改

关于 双精度字段类型导入sqlserver转为numeric类型报错原因及解决方案

保存后,重新查询即可成功,不需要重新发布服务

4.总结,所有的bug都是有哈数的,存在既有原因,需要耐心找出原因