嗨,我是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中保留该列原始值而不是使用空值.
在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 "
| 归档时间: |
|
| 查看次数: |
612 次 |
| 最近记录: |