消息8114,级别16,状态5,过程deepanshu_temp,第141行将数据类型varchar转换为数字时出错

时间:2016-10-29 18:45:55

标签: sql sql-server tsql stored-procedures

我正在使用以下代码

(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) 但仍然无法找到答案。

有人能帮助我吗?

1 个答案:

答案 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必须定义返回类型。它决定一个数字。问题可能是将-转换为数字。