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

UJ.*_*UJ. 3 sql

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

UPDATE sometable 
SET 
    price1 =    @param1,
    price2 =    @param2,
    price3 =    @param3,
    price4 =    @param4,
WHERE
    ID = @param5
Run Code Online (Sandbox Code Playgroud)

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

Mat*_*lie 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
Run Code Online (Sandbox Code Playgroud)


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


另见:" COALESCE vs ISNULL "