如何在SQL中使用用户定义的函数返回记录计数?

时间:2014-08-27 10:48:02

标签: sql sql-server sql-server-2008

如何在SQL中使用用户定义的函数返回记录数?下面是我写的函数,但它失败了。

CREATE FUNCTION dbo.f_GetRecordCount
(@year INT)
RETURNS INT
AS 
BEGIN 
RETURN
SELECT COUNT(*) 
FROM dbo.employee
WHERE year = @year
END

也许SELECT查询返回TABLE但我需要返回INT。

2 个答案:

答案 0 :(得分:2)

您正在返回一个表,它是包含计数的一行。

如果您需要返回该值,则需要从查询中获取该值。

CREATE FUNCTION dbo.f_GetRecordCount(@year INT)
RETURNS INT
AS 
BEGIN 
    DECLARE @returnvalue INT;

    SELECT @returnvalue = COUNT(*) 
    FROM dbo.employee
    WHERE year = @year

    RETURN(@returnvalue);
END

但要注意一点,您应该意识到这会产生巨大的性能影响。如果在选择列表或条件中使用UDF,则会为结果集中的每一行调用它 - 它可能不会被优化掉。

例如,此查询不仅会调用该函数一次,而且会为每位员工调用一次:

SELECT Id, f_GetRecordCount(2001)
FROM employee

答案 1 :(得分:0)

RETURN在这里需要括号,以至于它不认为它只是结束了函数。

......但不要这样做!标量函数很糟糕!