You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server Money类型求和溢出但直接赋值正常的原因咨询

SQL Server Money类型求和溢出但直接赋值正常的原因

1. Money类型的取值边界

SQL Server的money类型有明确的存储范围:-922,337,203,685,477.5808 至 922,337,203,685,477.5807。你得到的最终求和结果137721256088510.00确实在这个区间内,所以直接赋值给money变量时不会报错。

2. 求和过程中的中间溢出

Script 1执行求和时,报错的根源在累加的中间步骤:

  • 先计算所有正数的总和:522155575758567.00 + 395662864132351.00 + 187076841800608.00 = 1104895281691526.00
  • 这个中间值已经超过了money类型的最大值(约9.2×10¹⁴)。SQL Server在求和时会用money类型存储临时累加结果,当中间值超出范围时,直接触发Msg 8115算术溢出错误,哪怕最终总和是合法的。

3. 直接赋值与求和的本质差异

  • Script 2是直接将合法范围内的数值赋值给money变量,只需要做一次范围校验,自然通过。
  • 求和操作是多步累加的过程,每一步的临时结果都要符合money的范围约束,中间溢出就会直接终止并报错。

内容的提问来源于stack exchange,提问作者Ivan Budiutama

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 00:38:26