私は次のクエリを持っています.CASE構造がどれほど悪いのか疑問に思っていました.DBエンジンは、E.EAOpIDがnullでない場合、E.EAOpIDにすでに含まれている値で上書きされます.
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;
この更新を 2 つの更新に分割する方が安価かもしれません。
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;