当NULL值传递给存储过程时,保留DataBase中的原始值

时间:2009-07-31 08:19:13

标签: sql

您好,我是SQL的新手,需要帮助 我有一个参数化存储过程,其中包含更新查询,如...

UPDATE sometable 
SET 
    price1 =    @param1,
    price2 =    @param2,
    price3 =    @param3,
    price4 =    @param4,
WHERE
    ID = @param5

现在,当我通过将任何参数值设置为NULL来执行此SP时,它会在DB中更新,我想知道的是,如果其中一个参数值为NULL,那么我们是否可以在DB中保留该列原始值而不是用NULL更新它。

2 个答案:

答案 0 :(得分:7)

在SQLServer中,整洁的方法是使用ISNULL(@param1, price1)

这需要@ param1并检查它是否为NULL。如果为NULL,则将其替换为price1中的值。我喜欢ISNULL,因为它非常易读,可以在锡上做到。

它不是ANSI SQL,而是存在更灵活的命令:COALESCE。它就像ISNULL,但需要任意数量的参数。它搜索它们以便获得第一个非NULL值。如果没有找到,则返回NULL ...


UPDATE sometable 
SET 
        price1 =        ISNULL(@param1, price1),
        price2 =        ISNULL(@param2, price2),
        price3 =        ISNULL(@param3, price3),
        price4 =        ISNULL(@param4, price4)
WHERE
        ID = @param5


UPDATE sometable 
SET 
        price1 =        COALESCE(@param1, price1),
        price2 =        COALESCE(@param2, price2),
        price3 =        COALESCE(@param3, price3),
        price4 =        COALESCE(@param4, price4)
WHERE
        ID = @param5


另见:“COALESCE vs ISNULL

答案 1 :(得分:2)

尝试使用CASE语句包装@paramx:

CASE @paramx     如果没有,那么pricex     ELSE @paramx END