这是一个较大的存储过程,应该获取用户加载的一批包装数据(即包装尺寸),如果仅提供了英制单位数据,它将以公制单位计算和填充尺寸,反之亦然。以下是高度计算的示例(我只是粘贴,因为对于每个尺寸,结构都是相同的,只是数字有所不同)。但是,我一直收到错误消息:
消息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)]
在每种情况下,当块试图将varchar值转换为int以匹配其第二个参数时,最外层的nullif
函数。尝试使用nullif(varcharValue, 0)
代替nullif(varcharValue, '0')
,即: