2016-11-10 3 views
-1

나는 저장 프로 시저를 통해 갈 것이고 나는 아래와 비슷한 약 13 개의 update 문을 발견했을 때이를 최적화하려고 노력했다. 나는 누군가가 이것보다 더 좋은 해결책을 가지고 있는지 궁금해했다. 나는 case 문이나 병합을 사용할 수 있다는 것을 알고 있으며 이것은 의미 론적으로 동일하지만 모든 열이 항상 업데이트된다는 것을 명심해야한다. 이것은 아마도 당신에게 아무런 문제를 일으키지 않을 것이지만,이 접근법이 동시성 문제를 야기 할 수 있도록 높은 트랜잭션 볼륨을 가질 수 있습니다. 왜 이러는기능을 유지하면서 여러 개의 업데이트 문을 결합 할 수 있습니까?

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의 경우

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

사용 coalesce 표현은 0에 열을 설정하는 방법? 나는 NULLs을 지킬거야!

관련 문제