为什么我不能在十进制字段中输入整数值?

fro*_*die 1 sql-server integer casting decimal

我正在尝试为SQL Server表编写一个insert语句,将值1插入到十进制字段中.该字段的类型为十进制(10,10),据我所知,这意味着它最多可以有10位数字,最多10位数字可以在小数点后面.但是,当我尝试运行insert语句时,我收到以下错误:

Arithmetic overflow error converting int to data type numeric.
Run Code Online (Sandbox Code Playgroud)

如果我将字段的数据类型更改为十进制(11,10),它会突然起作用.我在这里不理解什么?我究竟做错了什么?

KM.*_*KM. 13

decimal(10, 10) 表示小数点左边的所有小数位,没有数字!

看到这里:http://msdn.microsoft.com/en-us/library/aa258832(SQL.80).aspx_

十进制[(p [,s])]

p(precision) 指定小数点左侧和右侧可存储的最大小数位数.精度必须是从1到最大精度的值.最大精度为38.默认精度为18.

s(scale) 指定可以存储在小数点右侧的最大小数位数.比例必须是从0到p的值.只有在指定精度时才能指定比例.默认比例为0; 因此,0 <= s <= p.根据精度,最大存储大小会有所不同.

decimal(11,10) 给你小数点左边1位数,右边10位数,所以整数1适合现在!

编辑

使用时decimal(p,s),可以考虑p要存储的总位数(无论小数点的左侧或右侧),以及s这些p位数中应有多少位于小数点右侧.

DECIMAL(10,5)=     12345.12345
DECIMAL(10,2)=  12345678.12
DECIMAL(10,10)=         .1234567891
DECIMAL(11,10)=        1.1234567891
Run Code Online (Sandbox Code Playgroud)

  • 是的,但这并不意味着它是一个滑动的小数点。含义是,如果您在右边提供的数字少于10位,则其余为零。 (2认同)