在SQL Server 2008中将varchar转换为数字数据类型时发生算术溢出错误

时间:2016-02-03 15:16:39

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

我在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。我遇到了同样的错误。

由于

2 个答案:

答案 0 :(得分:3)

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

使用Numeric(11,10)(逗号前一位,逗号后10位)尝试。

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

答案 1 :(得分:0)

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

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

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