select base_id, [31] as pkgcode,[84] as grossWeightunit,[189] as netWeightunit,[332] as specification,
[356] as shelfLife,[52] as tradeItemGroupIdentificationDescription,[132] as descriptionShort,
[51] as PackagingMaterialCompositionQuantity,[405] as Placeoforigin,
CASE WHEN  ISNUMERIC([106])=1     THEN convert(numeric(18,4),[106])  ELSE 0 END as height,
 CASE WHEN ISNUMERIC([101])=1     THEN convert(numeric(18,4),[101])  ELSE 0 END as width,  
 CASE WHEN ISNUMERIC([118])=1    THEN convert(numeric(18,4),[118])  ELSE 0 END as depth, 
 CASE WHEN ISNUMERIC([196])=1     THEN convert(numeric(18,4),[196])  ELSE 0 END as retailPriceOnTradeItem,
CASE WHEN ISNUMERIC([54])=1     THEN convert(numeric(18,4),[54])  ELSE 0 END as gross,
 CASE WHEN ISNUMERIC([10])=1     THEN convert(numeric(18,4),[10])  ELSE 0 END as netWeight, 
CASE WHEN isdate([325])=1       THEN convert(datetime,[325]) ELSE convert(datetime,'9999-12-31') END as DiscontinuedDate
FROM 
(SELECT valu,att_id,base_id from tradeitembv  ) P pivot ( max(valu) FOR att_id 
IN ([106], [101],[118],[31],[54],[84],[10],[189],[196],[332],
[356],[132],[52],[88],[51],[325],[405]) ) AS pvt 
ISNUMERIC()这个涵数一碰上有\这样的数据就转换不了了,帮我解决一下,谢谢大家了

解决方案 »

  1.   

    CASE WHEN ISNUMERIC([106])=1 AND PATINDEX('%[$\¥E]%',[106])=0 THEN convert(numeric(18,4),[106]) ELSE 0 END 可以参考类似这样处理
      

  2.   

    我这里不光有“\”这样的数据,还有好多全角的,还有好多varchar的,老是出将 varchar 转换为数据类型 numeric 时出现算术溢出错误。肯定还是哪转不过去,真不知道怎么办了。大家帮帮忙吧