【发布时间】:2017-11-08 19:41:26
【问题描述】:
我有一个存储过程,它执行SELECT 来返回一些行。在SELECT 中,我需要检查一个条件以便为某些列返回正确的值。这个条件包括一个标量函数。对于正在处理的行,所有时间标量函数都使用相同的参数调用,见下文:
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连接
标签: sql-server-2008 tsql user-defined-functions