2017-03-15 81 views
0

我正在創建一個存儲過程,我打算每24小時通過一個作業運行。我能夠成功運行過程查詢,但由於某些原因,這些值似乎沒有意義。見下文。存儲過程SELECT UPDATE錯誤的值

這是我的表,它看起來像前程序的運行,使用下面的語句:

SELECT HardwareAssetDailyAccumulatedDepreciationValue, 
HardwareAssetAccumulatedDepreciationValue FROM HardwareAsset 

enter image description here

我然後運行下面的過程(與基本意圖在複製到DailyDepreciationValue的DepreciationValue值):

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語句的結果是小號如下:

enter image description here

這真的犯規任何意義,我在所有的任何想法?

+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