我正在使用以下代码
(select
CASE
WHEN [Primary Plan] > 0
THEN
CASE
WHEN [market_type] = 'WH'
THEN
CASE
when @a > 20
then 1
WHEN (((#temp.[MTD Primary] + #temp.[stockC&F])/(#temp.[Primary Plan])) < ((@a/30) + 20) )
THEN
(((#temp.[Primary Plan]) *((@a/30) + 20)) - (#temp.[stockC&F] + #temp.[MTD Primary]))
-- when (((#temp.[MTD Primary] + #temp.[stockC&F] +#temp.stockplant + #temp.stocktransact)/#temp.[Primary Plan]) < ((@a/30) + 20) )
else 0
END
ELSE ''
end
ELSE '-'
END AS 'availibility_alert')
我根据临时表(#temp2
)中的某些计算插入此值,但收到错误:
Msg 8114,Level 16,State 5,Procedure deepanshu_temp,141行
将数据类型varchar转换为数字时出错。Msg 8114,Level 16,State 5,Procedure deepanshu_temp,141行
将数据类型varchar转换为数字时出错。
我已经分析了错误是在&#39;然后&#39;之后的行中。在我的代码中:
(((#temp.[Primary Plan]) *((@a/30) + 20)) - (#temp.[stockC&F] + #temp.[MTD Primary]))
我还检查过我使用的列类型为decimal(38,6)
但仍然无法找到答案。
有人能帮助我吗?
答案 0 :(得分:1)
这是你的代码缩进了一点:
select (CASE WHEN [Primary Plan] > 0
THEN (CASE WHEN [market_type] = 'WH'
THEN (CASE when @a > 20
then 1
WHEN (((#temp.[MTD Primary] + #temp.[stockC&F])/(#temp.[Primary Plan])) < ((@a/30) + 20) )
THEN (((#temp.[Primary Plan]) *((@a/30) + 20)) - (#temp.[stockC&F] + #temp.[MTD Primary]))
else 0
END)
ELSE ''
end)
ELSE '-'
END) AS availability_alert
请注意,您将一些值作为数字(0
)返回,一些值作为字符串(-
)返回。
SQL Server必须定义返回类型。它决定一个数字。问题可能是将-
转换为数字。