值加null

时间:2011-10-12 17:00:40

标签: sql sql-server

我在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

2 个答案:

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