存储过程SELECT UPDATE不正确的值

时间:2017-03-15 16:32:15

标签: sql-server stored-procedures

我正在创建一个存储过程,我打算每24小时通过一个作业运行一次。我能够成功运行过程查询,但由于某种原因,值似乎没有意义。见下文。

这是我的表以及在运行该过程之前的样子,使用以下语句:

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 个答案:

答案 0 :(得分: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