2016-11-10 3 views
-1

私はストアドプロシージャを実行しており、以下のような約13個の更新ステートメントが出現したときに最適化しようとしていました。誰かがこれよりも良い解決策を持っているのだろうかと思っていました。私はケース・ステートメントを使用するか、合体することができますが、これは意味的には同じですが、すべての列が常に更新されることに留意してください。おそらく問題はありませんが、トランザクション量が多いので、この方法で並行性の問題が発生する可能性があります。彼らがnullの場合は0に列を設定する機能を維持しながら複数の更新文を組み合わせることはできますか?

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表現:

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を保つだろう!

関連する問題