Sql 我可以在保留功能的同时合并多个update语句吗?
我正在经历一个存储过程,当我遇到大约13条类似于下面的更新语句时,我正试图对其进行优化。我想知道是否有人有比这更好的解决方案。我知道我可以使用case语句或coalesce,这在语义上是相同的,但请记住,所有列都将始终更新。这可能不会给您带来任何问题,但我的事务量可能很大,因此这种方法可能会导致并发问题Sql 我可以在保留功能的同时合并多个update语句吗?,sql,sql-server,tsql,ssms,Sql,Sql Server,Tsql,Ssms,我正在经历一个存储过程,当我遇到大约13条类似于下面的更新语句时,我正试图对其进行优化。我想知道是否有人有比这更好的解决方案。我知道我可以使用case语句或coalesce,这在语义上是相同的,但请记住,所有列都将始终更新。这可能不会给您带来任何问题,但我的事务量可能很大,因此这种方法可能会导致并发问题 UPDATE COGS SET Revenue = 0 WHERE Revenue IS NULL AND monthDate = @targetCOGSdate;
UPDATE COGS
SET Revenue = 0
WHERE Revenue IS NULL
AND monthDate = @targetCOGSdate;
UPDATE COGS
SET Costs = 0
WHERE Costs IS NULL
AND monthDate = @targetCOGSdate;
UPDATE COGS
SET Disposal = 0
WHERE Disposal IS NULL
AND monthDate = @targetCOGSdate;
UPDATE COGS
SET Trans = 0
WHERE Trans IS NULL
AND monthDate = @targetCOGSdate;
如果列为null,请使用合并表达式将列设置为0:
UPDATE COGS
SET Revenue = coalesce(Revenue, 0),
Costs = coalesce(Costs, 0),
Disposal = coalesce(Disposal, 0),
Trans = coalesce(Trans, 0)
WHERE (Revenue IS NULL or Costs IS NULL or Disposal IS NULL or Trans IS NULL)
AND monthDate = @targetCOGSdate;
但你为什么要这么做?我会保留空的 是,使用合并:
UPDATE COGS
SET Revenue = COALESCE(Revenue, 0),
Costs = COALESCE(Costs, 0),
Disposal = COALESCE(Disposal, 0),
Trans = COALESCE(Trans, 0)
WHERE monthDate = @targetCOGSdate AND
(Revenue IS NULL OR Costs IS NULL OR Disposal IS NULL OR Trans IS NULL);