Как объединить это `IF ... ELSE` в хранимой процедуре? - PullRequest
0 голосов
/ 23 июня 2011

У меня такое ощущение, что этот SP можно упростить. Можно ли устранить это IF...ELSE и объединить его с тем же WHERE -условием?

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

1 Ответ

2 голосов
/ 23 июня 2011
WHERE (@onlyNoModel != 1 OR RMA.ModelID = 1)

Является ли это так же эффективно, как версия IF..ELSE до оптимизатора запросов. Надеемся, что WHERE будет оптимизирован любым подходящим оптимизатором, если @onlyNoModel не равно 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...