关于 sql:Msg 8114, Level 16, State 5, Procedure deepanshu_temp, Line 141 Error convert data type varchar to numeric

Msg 8114, Level 16, State 5, Procedure deepanshu_temp, Line 141 Error converting data type varchar to numeric

我正在使用以下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
(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, Line 141
Error converting data type varchar to numeric.

Msg 8114, Level 16, State 5, Procedure deepanshu_temp, Line 141
Error converting data type varchar to numeric.

我已经分析出错误出现在我的代码中\\'then\\'之后的那一行:

1
(((#temp.[PRIMARY Plan]) *((@a/30) + 20)) -  (#temp.[stockC&F] + #temp.[MTD PRIMARY]))

我还检查了我使用的列是 decimal(38,6) 类型的
但仍然无法找到。

谁能帮帮我?


这是你的代码缩进更好一点:

1
2
3
4
5
6
7
8
9
10
11
12
13
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 必须定义返回类型。它决定一个数字。问题可能是将 - 转换为数字。