2017-03-15 77 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