数据转换问题-将varchar值'0.0'转换为数据类型int时转换失败

问题描述 投票:0回答:1

这是一个较大的存储过程,应该获取用户加载的一批包装数据(即包装尺寸),如果仅提供了英制单位数据,它将以公制单位计算和填充尺寸,反之亦然。以下是高度计算的示例(我只是粘贴,因为对于每个尺寸,结构都是相同的,只是数字有所不同)。但是,我一直收到错误消息:

消息245,级别16,状态1 ---将varchar值'0.0'转换为数据类型int

时转换失败

我想补充一点是,加载文件中没有0.0形式的数据,因此我认为这是从null来的,这就是为什么我尝试使用结尾的强制类型转换和nullif来处理它们的原因。

select [Product ID] as [Product ID],
    [ID] as [PackRecordID],
    case when isnumeric([Height (Imperial)])= 1  and ([Height (Metric)] is null or [Height (Metric)] = '')    then
       case when [Height UOM (Imperial)] = 'FT' then nullif(try_cast((try_cast(isnull([Height (Imperial)],0) as numeric)*0.3048) as varchar(20)),0)
          when [Height UOM (Imperial)] = 'IN' then nullif(try_Cast((try_cast(isnull([Height (Imperial)],0)as numeric)*2.54) as varchar(20)),0)
          when [Height UOM (Imperial)] = 'YD' then nullif(try_Cast((try_cast(isnull([Height (Imperial)],0)as numeric)*0.9144) as varchar(20)),0) else  nullif(try_cast((try_cast(isnull([Height (Metric)],0) as numeric)*1)as varchar(20)),0) end 
                   else  nullif(try_cast((try_cast(isnull([Height (Metric)],0) as numeric)*1)as varchar(20)),0)
                   end as [Height (Metric)], 

   case when [Height UOM (Imperial)] = 'FT'and ([Height UOM (Metric)] is null or [Height UOM (Metric)] = '') then 'm'
           when [Height UOM (Imperial)] = 'IN' and ([Height UOM (Metric)] is null or [Height UOM (Metric)] = '') then 'cm'
                 when [Height UOM (Imperial)] = 'YD' and ([Height UOM (Metric)] is null or [Height UOM (Metric)] = '') then 'm'  else try_cast([Height UOM (Metric)]as varchar(max)) end as [Height UOM (Metric)]
sql-server sqldatatypes
1个回答
0
投票

在每种情况下,当块试图将varchar值转换为int以匹配其第二个参数时,最外层的nullif函数。尝试使用nullif(varcharValue, 0)代替nullif(varcharValue, '0'),即:

© www.soinside.com 2019 - 2024. All rights reserved.