我可以在保持功能的同时组合多个更新语句吗?

Can I combine multiple update statements while keeping functionality?

我正在执行一个存储过程,当我遇到大约 13 个类似于下面的更新语句时,我正在尝试对其进行优化。我想知道是否有人有比这更好的解决方案。我知道我可以使用 case 语句或合并,这在语义上是相同的,但请记住,所有列都将始终更新。这可能不会给您带来任何问题,但我的交易量可能很大,因此这种方法可能会导致并发问题。

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;

使用 coalesce 表达式将列设置为 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;

但是你为什么要这样做?我会保留 NULL!

是的,使用 COALESCE():

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);