我有一個存儲過程,它會返回一些行,並返回SELECT
。在SELECT
內,我需要檢查一個條件以便爲某些列返回正確的值。這個條件由一個標量函數組成。所有時間標量函數被調用,正在處理的行相同的參數,見下圖:SQL Server(T-SQL):多次避免調用標量函數
SELECT
Id,
Name,
Surname,
CASE WHEN (dbo.GetNumTravels(Id) >= 50)
THEN 10
ELSE 99
END as Factor1,
CASE WHEN (dbo.GetNumTravels(Id) >= 50)
THEN 15
ELSE -1
END as Factor2,
CASE WHEN (dbo.GetNumTravels(Id) >= 50)
THEN 30
ELSE 70
END as Factor3
FROM
Employees
WHERE
DepartmentId = 100
我擔心的表現,我的意思是,我不喜歡把標量函數dbo.GetNumTravels
倍數倍,因此如何避免這種情況,只調用一次,然後使用它所有的時間,我需要它?
爲什麼你首先要求這個? 「GetNumTravels」做什麼,爲什麼它慢?如果你想查找每個員工的旅行,你應該在WHERE子句中使用連接或子查詢,而不是SELECT子句中的單個查詢。您可以使用* view *而不是函數,並使用'Employees'將其加入 –