Sql server 为什么可以';在十进制字段中输入一个整数值?
我正在尝试为SQL Server表编写一个insert语句,将值1插入到十进制字段中。该字段是decimal(10,10)类型,据我所知,这意味着它最多可以有10个数字,其中最多有10个数字可以位于小数点之后。但是,当我尝试运行insert语句时,出现以下错误:Sql server 为什么可以';在十进制字段中输入一个整数值?,sql-server,casting,integer,decimal,Sql Server,Casting,Integer,Decimal,我正在尝试为SQL Server表编写一个insert语句,将值1插入到十进制字段中。该字段是decimal(10,10)类型,据我所知,这意味着它最多可以有10个数字,其中最多有10个数字可以位于小数点之后。但是,当我尝试运行insert语句时,出现以下错误: Arithmetic overflow error converting int to data type numeric. 如果我将字段的数据类型更改为decimal(11,10),它会突然起作用。我在这里不明白什么?我做错了什么?
Arithmetic overflow error converting int to data type numeric.
如果我将字段的数据类型更改为decimal(11,10),它会突然起作用。我在这里不明白什么?我做错了什么?十进制(10,10)
表示所有小数点,小数点左边没有数字
请看这里:
十进制[(p[,s])]
p(精度)指定小数位数的最大总数
可以存储在左侧和右侧
小数点的右边。
精度必须是介于1之间的值
通过最大精度。这个
最大精度为38。默认值
精度为18
s(刻度)指定可以输入的最大小数位数
存储在小数点右边
指向比例必须是0到0之间的值
通过p。只能指定比例
如果指定了精度。默认值
标度为0;因此,0decimal(10,10)
表示所有小数点,小数点左侧没有数字
请看这里:
十进制[(p[,s])]
p(精度)指定小数位数的最大总数
可以存储在左侧和右侧
小数点的右边。
精度必须是介于1之间的值
通过最大精度。这个
最大精度为38。默认值
精度为18
s(刻度)指定可以输入的最大小数位数
存储在小数点右边
指向比例必须是0到0之间的值
通过p。只能指定比例
如果指定了精度。默认值
标度为0;因此,我仍然感到困惑。它说小数位数是“小数点右边可以存储的最大小数位数”——不是说必须有10位。是的,但这并不意味着它是滑动小数点。这意味着,如果您在右边提供的数字少于10位,那么其余的都是零。@Joe,我不确定您到底想说什么,但是如果您运行
declare@x decimal(5,2);设置@x=1.123456789;选择@x;设置@x=1;选择@x
您将获得1.12
和1.00
。声明小数点后,小数点左右的位数是固定的,小数点不会滑动。@froadie,如果要在值中包含10个整数位数和10个小数位数:1234567891.1234567891
,请使用decimal(20,10)
@KM,我正在回复froadie的评论,不是你的帖子,我还是很困惑。它说小数位数是“小数点右边可以存储的最大小数位数”——不是说必须有10位。是的,但这并不意味着它是滑动小数点。这意味着,如果您在右边提供的数字少于10位,那么其余的都是零。@Joe,我不确定您到底想说什么,但是如果您运行declare@x decimal(5,2);设置@x=1.123456789;选择@x;设置@x=1;选择@x
您将获得1.12
和1.00
。声明小数点后,小数点左右的位数是固定的,小数点不会滑动。@froadie,如果要在值中包含10个整数位数和10个小数位数:1234567891.1234567891
,请使用decimal(20,10)
@KM,我正在回复froadie的评论,不是我加1的你的帖子。
DECIMAL(10,5)= 12345.12345
DECIMAL(10,2)= 12345678.12
DECIMAL(10,10)= .1234567891
DECIMAL(11,10)= 1.1234567891