算术溢出错误将数字转换为数据类型小钱。

时间:2017-04-27 22:13:08

标签: sql tsql sql-server-2008-r2

我的表中有一个名为[column_us]的列,我将数据类型指定为smallmoney not null。 在最初它看起来很好,数据正在进入这个表,但一个月后,我收到一个错误 :算术溢出错误将数字转换为数据类型smallmoney。 该语句已终止。 我是否需要将数据类型更改为数字(19,4),而不是此列?如果是这样,请解释我应该使用小钱,金钱或数字的数据类型。 小数点后小金额还允许多少个值。 提前致谢

2 个答案:

答案 0 :(得分:1)

通常,建议您选择具有所需精度和比例的numeric()。与分词一起使用时,Money类型可能会产生意外结果(关于此问题的money进一步讨论:Should you choose the money or decimal(x,y) datatypes in SQL Server?)。

numeric

+-----------+---------------+
| Precision | Storage bytes |
+-----------+---------------+
| 1 - 9     |             5 |
| 10-19     |             9 |
| 20-28     |            13 |
| 29-38     |            17 |
+-----------+---------------+

moneysmallmoney

+------------+-------------------------------------------------------+---------+
| Data type  |                         Range                         | Storage |
+------------+-------------------------------------------------------+---------+
| money      | -922,337,203,685,477.5808 to 922,337,203,685,477.5807 | 8 bytes |
| smallmoney | - 214,748.3648 to 214,748.3647                        | 4 bytes |
+------------+-------------------------------------------------------+---------+

参考:

答案 1 :(得分:0)

小额货币无法存储大额货款,您应该使用货币类型

smallmoney和money类型主要用于显示目的(货币符号,......)。 数值或小数类型在计算时更准确。

你应该考虑更多搜索:我已经找到了很多深入的解释。