【问题标题】:An arithmetic overflow error occurred while converting varchar to numeric data type in SQL Server 2008在 SQL Server 2008 中将 varchar 转换为数值数据类型时发生算术溢出错误
【发布时间】:2016-05-12 20:57:26
【问题描述】:

我在 SQL Server 2008 中有一个表:

Create table ExTable1 
(
     Fcur varchar(50),
     Tcur varchar(50),
     Rt numeric(10,10)
)

我正在尝试插入数据

Insert into [DB].[dbo].[ExTable1 ](Fcur, Tcur, Rt) 
values ('INR', 'EUR', 1) 

我得到的错误是

将 varchar 转换为数值数据类型时发生算术溢出错误。

当我将列 Rt 的数据类型更改为 numeric(10,2) 时,上面提到的查询非常好。

我要在Rt 列中插入的数据可能在小数点后有 10 位。

如何解决这个问题?

基本上我在 C# 代码中遇到了这个异常。所以我尝试直接在 SQL 服务器中执行在 C# 中创建的 QueryString。我遇到了同样的错误。

谢谢

【问题讨论】:

  • NUMERIC(10,10) 将只保存值

标签: c# sql-server sql-server-2008


【解决方案1】:

Numeric(10,10) 将定义一个仅由小数组成的数字...

试试Numeric(11,10)(逗号前1位,逗号后10位)。

第一个参数定义全宽,第二个参数定义逗号后全宽内的位数,read here

【讨论】:

    【解决方案2】:

    十进制[ (p[ , s] )] 和数字[ (p[ , s] )] 固定精度和比例数字。当使用最大精度时,有效值从 - 10^38 +1 到 10^38 - 1。十进制的 ISO 同义词是 dec 和 dec(p, s)。 numeric 在功能上等同于 decimal。

    p(精度) 将存储的小数位数的最大总数,包括小数点的左侧和右侧。精度必须是从 1 到最大精度 38 之间的值。默认精度是 18。

    s(比例) 将存储在小数点右侧的小数位数。从 p 中减去该数字以确定小数点左侧的最大位数。小数点右侧可以存储的最大小数位数。比例必须是从 0 到 p 的值。仅当指定精度时才能指定比例。默认比例为 0;因此,0

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多