2011-06-22 4 views
0

私はこのSPを単純化できると感じています。 IF...ELSEを削除し、同じWHERE -Conditionとマージすることはできますか?これはIF..ELSEバージョンほど効率的であるかどうかこの `IF ... ELSE`をストアドプロシージャにマージするには?

CREATE PROC [dbo].[UpdateRmaModelWithTacList](
    @onlyNoModel bit 
) 
AS 
IF @onlyNoModel=1 
BEGIN 
    UPDATE RMA 
    SET  ModelID = COALESCE(modModel.idModel, 1) 
    FROM  tabTAC INNER JOIN 
       modModel ON tabTAC.fiModel = modModel.idModel RIGHT OUTER JOIN 
       RMA ON tabTAC.TAC = SUBSTRING(RMA.IMEI, 1, 8) 
    WHERE  (RMA.ModelID = 1) 
END 
ELSE 
BEGIN 
    UPDATE RMA 
    SET  ModelID = COALESCE(modModel.idModel, RMA.ModelID) 
    FROM  tabTAC INNER JOIN 
       modModel ON tabTAC.fiModel = modModel.idModel RIGHT OUTER JOIN 
       RMA ON tabTAC.TAC = SUBSTRING(RMA.IMEI, 1, 8) 
END 

RETURN @@ROWCOUNT; 

Go 

答えて

2
WHERE (@onlyNoModel != 1 OR RMA.ModelID = 1) 

クエリオプティマイザ次第です。 WHEREは、@onlyNoModelが1でなければ、適切なオプティマイザによって最適化されています。

+0

ありがとうございました。パフォーマンスはこのSPの重要な要素ではありません。 –