2011-07-27 10 views
-1

私は間違っているのですか?これを行うより良い方法がありますか?文字列から長さを切り出し、それを数値に変換しますか?私は数値エラーにvarcharを取得していますか?

UPDATE VF_CasINV_Cost 
    SET TotWgt = CASE 
     WHEN (Dimension like '%x%') THEN 
     (cast(left(Dimension, charindex('X', Dimension, 1) - 1) as numeric)) * 
     (cast(substring(Dimension, 1 + charindex('X', Dimension, 1), len(Dimension)) as numeric))/144.00 

     WHEN TotWgt = 0 and [Wt/Ft] > 0 THEN (Dimension * [Wt/Ft]) * [Count] 
     WHEN TotWgt = 0 and [Wt/Sht] > 0 THEN ((Dimension * [Wt/Sht])/100) * [Count] 
     WHEN TotWgt = 0 and [Wt/Pc] > 0 THEN ((Dimension * [Wt/Pc])/100) * [Count] 
     ELSE TotWgt 
    END --TotWgt, Item#, TotWgt, [Wt/Ft], [Wt/Sht], [Wt/Pc], [Count], Dimension, TotWgt 
FROM VF_CasINV_Cost 
WHERE (CalendarYear = 2010) AND (Item# = Item#) AND (ID = ID) AND (Item# < 99999990) 
AND K = 'K' AND D = '' AND C = '' AND (Unit = 'cwt' OR Unit = 'cwts') 
+2

あなたはこれを単純化するためにGOTを持っています。あなたのスキーマがどのようなものなのか、どの文字列が処理されているのかなどはわかりません。 – n8wrl

+1

どのスキーマがどのタイプの列が – sll

答えて

0

Dimensionはvarcharフィールドです。このvarcharフィールドから数値を解析して計算に使用しようとしています。 もしそうなら、あなたの問題は最後の3つのWHENの場合です:あなたはそれをキャストせずに乗算操作で次元を使用しています。 SQLはvarcharフィールドで乗算を実行できません。

+0

であるかがわかるように、テーブルスキーマを用意する必要があります。彼らは見つけるのが最も難しい です。ありがとう! TotWgt = 0と[Wt/Ft]> 0 THEN(キャスト(数値による数値)* [Wt/Ft])* [Count] いつTotWgt = 0と[Wt/Sht] > 0 THEN((キャスト(数値としての寸法)* [Wt/Sht])/ 100)* [数] WHEN TotWgt = 0および[Wt/Pc]/Pc])/ 100)* [Count] しかし、私はまだ数値エラーにvarcharを取得しますか? – user823893

+0

Dimensionが "d1782"のようなものであれば、エラーが発生します。文字列から数値を解析してキャストを実行する必要があります – Dimitri

関連する問題