如何解决Msg 8115,Level 16,State 2,Line 2算术溢出错误将表达式转换为数据类型int。

时间:2017-10-20 15:10:19

标签: sql sql-server

我有这样的公式。但公式有误。请帮帮我。

select 
    [DAY] as [DAY],
    [Name] as [Name],
    ((cast([columnA] + [columnB] + [columnC] as bigint) * 1000) / NULLIF(8 * 1024 * 1048576, 0)) as [TotalColumn]
from 
    [TableA]

错误讯息:

  

Msg 8115,Level 16,State 2,Line 2
  将表达式转换为数据类型int的算术溢出错误。

2 个答案:

答案 0 :(得分:3)

由于你的股息很大,我怀疑你需要除数才能成为一个重要人物。由于你有一些整数文字,数学将尝试将它放在一个int中,它太大了。但是你可以强制除数成为一个重要因素。

convert(bigint, 8) * 1024 * 1048576

答案 1 :(得分:1)

我不确定您在尝试的是什么,但您可以使用 NUMERIC 数据类型,因为结果可以包含小数位。

select 
'Monday' as [DAY],
'Septiana Fajrin' as [Name],
((cast('5' + '5' + '5' as Numeric) * 1000) / (convert(Numeric, 8) * 1024 * 1048576))as [TotalColumn]  

结果

DAY Name    TotalColumn
Monday  Septiana Fajrin 0.000064610503613