【问题标题】:Msg 8114, Level 16, State 5, Procedure deepanshu_temp, Line 141 Error converting data type varchar to numeric消息 8114,级别 16,状态 5,过程 deepanshu_temp,第 141 行错误将数据类型 varchar 转换为数字
【发布时间】:2016-10-29 18:45:54
【问题描述】:

我正在使用以下代码

(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) 中的一些计算插入此值,但出现错误:

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

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

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

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

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

谁能帮帮我?

【问题讨论】:

  • @a 的类型是什么?
  • 用数字文字一一替换列和变量。你会找到原因的。

标签: sql sql-server tsql stored-procedures


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2017-06-01
    • 1970-01-01
    相关资源
    最近更新 更多