2011-06-22 36 views
0

我有一種感覺,這個SP可以被簡化。 是否有可能消除該IF...ELSE並將它與相同的WHERE合併?如何合併這個`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) 

是否爲IF..ELSE版本高達查詢優化,這是因爲有效的。如果@onlyNoModel不是1,WHERE將有希望被任何像樣的優化程序優化。

+0

謝謝,這很容易,有時我想太複雜了。性能不是這個SP的關鍵因素。 –