2016-11-10 68 views
-1

我正在通过一个存储过程,当我遇到大约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; 

回答

2

是,使用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); 
1

使用​​3210表达式设置为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!

相关问题