我收到以下错误:
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))
答案 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))