使用加法赋值运算符(+=)时更新NULL值的技术求助
解决SQL中NULL值更新后仍为NULL的问题
这是因为在SQL的算术运算规则里,任何与NULL进行运算的结果都会是NULL,所以你直接用Qty += 2的时候,NULL加2还是NULL,自然达不到想要的效果。这里有几个实用的解决方案:
使用
ISNULL函数处理NULL值
这个函数会把NULL替换成你指定的默认值,再进行运算,修改后的完整SQL如下:declare @temp table ( Id int, Qty int ) insert into @temp values(1,null) update @temp set Qty = ISNULL(Qty, 0) + 2 select * from @temp这里
ISNULL(Qty, 0)会把原本为NULL的Qty转换成0,再加2就得到你想要的2了。使用
COALESCE函数(更通用的替代方案)COALESCE和ISNULL类似,但它支持传入多个参数,会返回第一个非NULL的值,用法如下:update @temp set Qty = COALESCE(Qty, 0) + 2效果和上面的
ISNULL完全一样,如果你以后需要处理多个可能的NULL场景,这个函数会更灵活。提前给列设置默认值(从根源避免问题)
如果你希望后续插入数据时,Qty默认就有值而不是NULL,可以在定义临时表的时候直接指定默认值:declare @temp table ( Id int, Qty int DEFAULT 0 ) insert into @temp(Id) values(1) -- 这里不指定Qty,会自动用默认值0 update @temp set Qty +=2 select * from @temp这样插入时Qty就是0,后续的
Qty +=2就能正常得到2了。
内容的提问来源于stack exchange,提问作者Zoyeb Shaikh
相关产品推荐
相关产品推荐

