我觉得这个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
答案 0 :(得分:2)
WHERE (@onlyNoModel != 1 OR RMA.ModelID = 1)
这是否与IF..ELSE
版本一样高效,取决于查询优化器。如果WHERE
不是1,那么@onlyNoModel
将被任何体面的优化器优化掉。