将表达式转换为数据类型的算术溢出错误int SQL Server

时间:2014-11-26 21:32:55

标签: sql tsql sql-server-2012

我收到以下错误:

  

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

bigint的数字不算太大。我无法指出这里出了什么问题。请指点。

查询

DECLARE SP bigint
DECLARE LP bigint

SET SP = 125000000 
SET LP = 88300000 

SELECT a = CAST((AVG(LP * 100 / CAST(SP AS DECIMAL(10, 2)))) AS DECIMAL(10,2))

3 个答案:

答案 0 :(得分:2)

我认为你的int错误来自分裂。您还应该能够将{100}从AVG函数移出CAST而不是DECLARE @SP bigint DECLARE @LP bigint SET @SP = 125000000 SET @LP = 88300000 select a= 100 * avg(@LP / cast(@SP as float))

{{1}}

另外,请参阅this关于bigints的划分

答案 1 :(得分:2)

试试这个

DECLARE @SP bigint
DECLARE @LP bigint

SET @SP = 125000000 
SET @LP = 88300000 

SELECT a = CAST((AVG(@LP * 100 / CAST(@SP AS DECIMAL(12, 2)))) AS DECIMAL(12,2))

我同意marc_s评论,@SP有九位数 - 这不能转换为DECIMAL(10,2)您需要在十进制类型中使用更多数字,例如DECIMAL(16,2)`或类似的东西

答案 2 :(得分:1)

你尝试了什么?如果只是为了解决问题而不是发布在SO上甚至无效的语法本来就不那么重要了。

这失败

DECLARE @SP bigint
SET @SP = 125000000
select cast(@SP as decimal(10,2))