我在SQL SERVER 2005上运行以下过程
ALTER proc [dbo].[p_shipavgAddOnUpdate]
as
begin
declare @addon decimal(20,2),@FloorPrice decimal(20,2)
update z
set
@addon = case when pp.mapprice>0
then 0
else
( BasePrice + Mktng ) *.027
-- to allow for a higher sale price than the base price
end
,addon=@addon
,@FloorPrice = ( BasePrice + Mktng + @AddOn )
,@FloorPrice =
CASE WHEN @FloorPrice > COALESCE(pp.mapPrice, 0)
THEN @FloorPrice
ELSE .mapPrice
END
,FloorPrice = @FloorPrice
,FloorOffer = @FloorPrice + FinalShippCost
FROM zshipaverage z
inner join products p on z.sku = p.sku
inner join product_pricing pp on p.productid=pp.product
end
然后proc从另一个proc调用,它运行一堆proc,即
exec proc1
exec proc2
.... 等
在此前一个proc中,设置了baseprice字段 在下一个过程中,设置Mktng字段 在这个过程中,插件和floorprice被设置 所以floorprice假设是= baseprice + Mktng + Addon 在运行proc之后我以记录结束 如此:
baseprice = 6.14
mktng = 2.13
addon = NULL
floorprice= 0.00
两个问题; 1.-如果addon为null,我怎么能以0.00的floorprice结束? (nromal ansi默认设置为 value + NULL = NULL)
I can't reproduce the effect
2.-我确定呼叫过程中的程序是按顺序运行的吗?
日Thnx
答案 0 :(得分:1)
它就在你的代码中
@FloorPrice =
CASE WHEN
@FloorPrice > COALESCE(pp.mapPrice, 0) THEN
@FloorPrice ELSE .mapPrice END
在设置NULL
的值之前,您pp.mapPrice
检查@FloorPrice
,这意味着如果@FloorPrice
的任何成分为NULL
,则, @FloorPrice = (ISNULL(BasePrice,0) +
ISNULL(Mktng,0) +
ISNULL(@AddOn,0) )
将为0 / p>
您可能还想按如下方式替换其他部分:
{{1}}
答案 1 :(得分:0)
试试这个:
校正:
, @FloorPrice = CASE WHEN @AddOn IS NULL THEN 0 ELSE ( BasePrice +
Mktng+
@AddOn ) END