Tôi có một thủ tục lưu trữ mà không một cái gì đó như:Có thay thế logic điều kiện bằng các câu lệnh CASE hiệu quả trong Transact-SQL không?
IF @Param = '1'
SELECT HT.HeaderKey, HT.Description,
(SELECT SUM(E1) -- E1 is actually a complex expression
FROM DetailTable DT INNER JOIN ...
INNER JOIN ...
INNER JOIN ...
WHERE DT.HeaderKey = HT.HeaderKey)
FROM HeaderTable HT
ELSE IF @Param = '2'
SELECT HT.HeaderKey, HT.Description,
(SELECT SUM(E2) -- E2 is yet another complex expression
FROM DetailTable DT INNER JOIN ... -- Here, DetailTable is not
INNER JOIN ... -- joined to the same tables
INNER JOIN ... -- as in the first case
WHERE DT.HeaderKey = HT.HeaderKey)
FROM HeaderTable HT
-- Etc. There are five cases.
tôi muốn để giảm truy vấn như sau:
SELECT HT.HeaderKey, HT.Description,
CASE @Param
WHEN '1'
(SELECT SUM(E1)
FROM DetailTable DT INNER JOIN ...
INNER JOIN ...
INNER JOIN ...
WHERE DT.HeaderKey = HT.HeaderKey)
WHEN '2'
(SELECT SUM(E2)
FROM DetailTable DT INNER JOIN ...
INNER JOIN ...
INNER JOIN ...
WHERE DT.HeaderKey = HT.HeaderKey)
-- Etc.
ELSE 0
END
FROM HeaderTable HT
Tuy nhiên, nếu SQL Server đánh giá tất cả các trường hợp , bất kể cái nào sẽ thực sự được trả lại, truy vấn đã sửa đổi sẽ không hiệu quả.
Vì vậy, tôi muốn biết, không SQL Server đánh giá tất cả các trường hợp trong một tuyên bố CASE
, hoặc chỉ là người đầu tiên thỏa mãn điều kiện của CASE
?
1 cho câu hỏi hay –
Cảm ơn, Stephanie. – pyon