为啥我的标量 UDF 函数返回不止一行?

Posted

技术标签:

【中文标题】为啥我的标量 UDF 函数返回不止一行?【英文标题】:Why does my Scalar UDF funciton return more than one row?为什么我的标量 UDF 函数返回不止一行? 【发布时间】:2016-04-13 02:05:16 【问题描述】:

我有一个标量 UDF 函数,它在调用时应该返回一行。它实际上为表中的每一行返回相同的值,27 次。当我调用该函数时,我可以轻松地添加“Distinct”或“Top 1”,但我不应该这样做。

功能代码如下:

CREATE FUNCTION dbo.TotalIncome(@name AS VARCHAR(10), @weekday AS VARCHAR(10))
RETURNS INT
AS
BEGIN
    DECLARE @total int;
    SELECT @total = SUM(IncomeAmount)
    FROM DailyIncome
    WHERE VendorName = @name
        AND EachDay = @weekday;
    IF (@total IS NULL)
        SET @total = 0;
    RETURN @total;
END;

这是我调用函数的代码:

SELECT dbo.TotalIncome('SPIKE', 'FRI') AS TotalIncome
FROM dbo.DailyIncome

它应该返回一行,但它返回 27。

【问题讨论】:

因为dbo.DailyIncome中有27行。 标量 UDF 返回一个 value 而不是一个 row 【参考方案1】:

这是因为dbo.DailyIncome 中有 27 行。每行调用一次 UDF。也许你想要这样的东西:

SELECT dbo.TotalIncome('SPIKE', 'FRI') AS TotalIncome

【讨论】:

修复它。我显然是使用这种函数的新手,所以我没有意识到我不需要 From 语句。谢谢! 没问题。很高兴能帮上忙!

以上是关于为啥我的标量 UDF 函数返回不止一行?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 UDF 标量函数传递给存储过程?

sqlserver 标量函数例子

Keras:为啥损失函数必须为每个批次项目返回一个标量,而不仅仅是一个标量?

MS SQL Server 中的标量 UDF 在查询中仅返回一个值

雪花标量 UDF 返回 无法评估不支持的子查询类型

MSSQL 上标量 UDF 中的 NULL 参数