我的表中有一个名为[column_us]的列,我将数据类型指定为smallmoney not null。 在最初它看起来很好,数据正在进入这个表,但一个月后,我收到一个错误 :算术溢出错误将数字转换为数据类型smallmoney。 该语句已终止。 我是否需要将数据类型更改为数字(19,4),而不是此列?如果是这样,请解释我应该使用小钱,金钱或数字的数据类型。 小数点后小金额还允许多少个值。 提前致谢
答案 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 |
+-----------+---------------+
money
和smallmoney
:
+------------+-------------------------------------------------------+---------+
| 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类型主要用于显示目的(货币符号,......)。 数值或小数类型在计算时更准确。
你应该考虑更多搜索:我已经找到了很多深入的解释。