【问题标题】:How to return the count of records using a user defined function in SQL?如何使用 SQL 中的用户定义函数返回记录数?
【发布时间】:2014-08-27 10:48:02
【问题描述】:

如何使用 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。

【问题讨论】:

  • 你得到什么错误?

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


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    RETURN 在这里需要括号,这样它就不会认为它只是结束函数。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-12
      • 1970-01-01
      • 1970-01-01
      • 2016-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多