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

将表达式转换为int SQL Server数据类型时出现算术溢出错误,sql,tsql,sql-server-2012,Sql,Tsql,Sql Server 2012,我得到以下错误: Msg 8115,16级,状态2,第1行 将表达式转换为数据类型int时出现算术溢出错误 这些数字对于bigint来说不是太大。我无法指出这里出了什么问题。请给我指点 质疑 你试了什么?仅仅解决你自己的问题要比发布语法的工作量要少,因为它在这方面甚至是无效的 这失败了 DECLARE @SP bigint SET @SP = 125000000 select cast(@SP as decimal(10,2)) 我认为你的整数错误来自除法。您还应该能够将100*移出AVG函数

我得到以下错误:

Msg 8115,16级,状态2,第1行 将表达式转换为数据类型int时出现算术溢出错误

这些数字对于bigint来说不是太大。我无法指出这里出了什么问题。请给我指点

质疑


你试了什么?仅仅解决你自己的问题要比发布语法的工作量要少,因为它在这方面甚至是无效的

这失败了

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

我认为你的整数错误来自除法。您还应该能够将100*移出AVG函数,并且不经常强制转换:

DECLARE @SP bigint
DECLARE @LP bigint

SET @SP = 125000000
SET @LP = 88300000 

select a= 100 * avg(@LP / cast(@SP as float)) 
另外,请参见关于bigint的划分

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_的评论,@SP有九位数字-这不能转换为十进制10,2。您需要在十进制类型中使用更多的数字,例如十进制16,2`或类似的数字

您确定这是您的查询和输出吗?变量中缺少@,转换为数值时应该溢出,而不是int。至少在SQL2008上是这样。@JoeEnos为了不被淹没,我只放了查询中出错的部分。这有很大的不同-您发布的查询将溢出,因为转换为十进制。如果您在强制转换为int时出现溢出错误,则您发布的内容不适用。请尝试在上发布问题的副本,以便我们可以准确地看到错误,而不会出现任何转录问题。小数10,2表示小数点后10位,其中2位在小数点后-小数点前8位。但是你的SP值应该是@SP,它实际上有九位数字——这不能转换成小数10,2!您需要在十进制类型中使用更多的数字,例如小数16,2或类似的数字如果您想查看pi的每一个最后一位,请使用此选择a=100*avg@LP / cast@SP如图24所示
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))