I have the following query, I was wondering how bad is CASE construct, It forces DB Engine to overwrite E.EAOpID with the value that is already contained in E.EAOpID when it is not null
UPDATE E
SET E.EAOpID = CASE
WHEN E.EAOpID IS NULL THEN @operationID
ELSE E.EAOpID
END,
E.AverageCapacity = E.AverageCapacity + 1,
E.Average = E.Average - (E.Average - E.Value) / E.AverageCapacity
FROM
(
SELECT E.EAOpID, E.AverageCapacity, E.Average, P.Value
FROM Probes AS P
INNER JOIN Estimates AS E ON P.EstimateID = E.ID
WHERE P.EAOpID = @operationID
) AS E;
Maybe it is cheaper to split this UPDATE into two UPDATES:
1
UPDATE E
SET E.EAOpID = @operationID
FROM
(
SELECT E.EAOpID, E.AverageCapacity, E.Average, P.Value
FROM Probes AS P
INNER JOIN Estimates AS E ON P.EstimateID = E.ID
WHERE P.EAOpID = @operationID
AND E.EAOpID IS NULL -- Additional statement here
) AS E;
2
UPDATE E
SET E.AverageCapacity = E.AverageCapacity + 1,
E.Average = E.Average - (E.Average - E.Value) / E.AverageCapacity
FROM
(
SELECT E.EAOpID, E.AverageCapacity, E.Average, P.Value
FROM Probes AS P
INNER JOIN Estimates AS E ON P.EstimateID = E.ID
WHERE P.EAOpID = @operationID
) AS E;