您好,我是SQL的新手,需要帮助 我有一个参数化存储过程,其中包含更新查询,如...
UPDATE sometable
SET
price1 = @param1,
price2 = @param2,
price3 = @param3,
price4 = @param4,
WHERE
ID = @param5
现在,当我通过将任何参数值设置为NULL来执行此SP时,它会在DB中更新,我想知道的是,如果其中一个参数值为NULL,那么我们是否可以在DB中保留该列原始值而不是用NULL更新它。
答案 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