这个功能有多优

时间:2010-10-14 03:05:07

标签: sql sql-server sql-server-2005 tsql user-defined-functions

我即将实现此功能来计算一些数字。

CREATE FUNCTION [dbo].[funLookupFTE] (@PFID int) RETURNS
    VARCHAR(20) AS BEGIN 

DECLARE @NumberOfFTE AS VARCHAR(20)
SET @NumberOfFTE = (SELECT  SUM(CASE WHEN Hours <= 20 THEN 0.5 WHEN Hours > 20 THEN 1     END) AS FTECount 
                    FROM tblPractitioners 
                    WHERE PFID =
@PFID)
RETURN @NumberOfFTE
END

只是想看看它是否是最优的,它不会自行解决问题。

1 个答案:

答案 0 :(得分:4)

如果要在任何类型的查询中调用它,那么最好使用子查询而不是用户定义的函数。

例如:

SELECT * FROM tblPractioners P1
INNER JOIN
(
    SELECT  PFID, SUM(CASE WHEN Hours <= 20 THEN 0.5 WHEN Hours > 20 THEN 1 END) 
        AS FTECount 
    FROM tblPractitioners 
    GROUP BY PFID
) P2 ON P1.PFID = P2.PFID

用户定义函数的性能可能非常差,但您确实需要使用子查询或UDF来比较执行计划,以确定哪个更好。