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

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都是有哈数的,存在既有原因,需要耐心找出原因

 

将不定期更新资源,欢迎持续关注


想获得更多的学习知识请关注微信公众号:西北码农或扫下方二维码

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值