我有一个存储过程,它会返回一些行,并返回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'将其加入 –