【问题标题】:Arithmetic overflow error converting numeric to data type small money将数字转换为数据类型小钱的算术溢出错误
【发布时间】:2017-09-25 21:31:19
【问题描述】:

我的表中有一个名为 [column_us] 的列,其中我将数据类型指定为 smallmoney 而不是 null。

最初它看起来不错,数据正在输入到这个表中,但一个月后我收到了一个错误:

将数字转换为数据类型 smallmoney 时出现算术溢出错误。 声明已终止。

我是否需要将此列的数据类型更改为数字 (19,4) notnull?如果是这样,您能解释一下我应该使用小钱、钱还是数字的数据类型?

还有小数点后小钱允许多少个数值。

【问题讨论】:

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


    【解决方案1】:

    smallmoney 无法存储大量金额,您应该改用 money 类型

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

    您应该考虑进行更多搜索:我发现了很多深入的解释。

    【讨论】:

      【解决方案2】:

      一般来说,建议选择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 |
      +------------+-------------------------------------------------------+---------+
      

      参考:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-29
        • 2013-05-27
        • 1970-01-01
        相关资源
        最近更新 更多