2017-03-15 15 views
0

は私が仕事を経て、24時間ごとに実行する上でつもりストアドプロシージャを、作成しています。私は正常にプロシージャのクエリを実行することができますが、何らかの理由で値が意味を持たないようです。下記参照。ストアドプロシージャのSELECT UPDATE不適切な値

これは私のテーブルとそれが次の文を使用して、前の手順の実行中にのように見えるです:

SELECT HardwareAssetDailyAccumulatedDepreciationValue, 
HardwareAssetAccumulatedDepreciationValue FROM HardwareAsset 

enter image description here

私は、基本的に意図して、次の手順を(実行します

BEGIN 

SELECT HardwareAssetID, HardwareAssetDailyAccumulatedDepreciationValue, 
HardwareAssetAccumulatedDepreciationValue FROM HardwareAsset 
WHERE HardwareAssetDailyAccumulatedDepreciationValue IS NOT NULL 

UPDATE HardwareAsset SET HardwareAssetAccumulatedDepreciationValue = CASE WHEN 
(HardwareAssetAccumulatedDepreciationValue IS NULL) THEN 
CONVERT(DECIMAL(7,2),HardwareAssetDailyAccumulatedDepreciationValue) ELSE 
CONVERT(DECIMAL(7,2),(HardwareAssetAccumulatedDepreciationValue + HardwareAssetDailyAccumulatedDepreciationValue)) 
END 

END 

しかし、私は時にselect文を再実行結果は以下のとおりです。)DepreciationValueにDailyDepreciationValueに値をコピーしますSは次のとおりです。

enter image description here

それは本当にすべての任意のアイデアで、私には何の意味も持たdoesntの?

+1

'SET AccTotal = ISNULL(AccTotalは、0)+ AccDaily' – Malk

+0

@Malk、私はそれを行く、同じ結果が得られました。 – TheTechnicalPaladin

+1

列のデータ型は何ですか? – Malk

答えて

1

私は、複製することはできませんよ。テーブル構造とデータの詳細が必要です。これは私が複製しようとしていたものです。必要に応じて変更すること自由に感じなさい:

create table #t (
     AccD1 decimal(7,2) 
    , AccD2 decimal(7,2) 
    , AccDaily as AccD1 + AccD2 
    , AccTotal decimal(7,2) 
) 

insert #t values 
     (100, 7.87, null) 
    , (300, 36.99, null) 
    , (400, 49.32, null) 
    , (100, 50.00, 100) 

select * from #t 

update #t set 
     AccTotal = isnull(AccTotal, 0) + AccDaily 
    , AccD1 = 0 
    , AccD2 = 0 

select * from #t 

drop table #t 
+1

です。計算された列がその計算で静的列を使用することを示します。私は信じられないほどプログラミングが悪いと思っていますが、計算を決めるときは意味があります。私は私が午前問題は、更新時に、私は値を変更する計算列を選択していていること、だと思います。私は一時的な価値を宣言し、そこに毎日保管する必要があると思う。次に、静的列をtemp値で更新します。 – TheTechnicalPaladin

+1

右。それはあなたを得る必要があります。がんばろう! – Malk