2016-04-13 7 views
2

У меня есть скалярная функция UDF, которая должна возвращать одну строку при вызове. Он фактически возвращает одно и то же значение для каждой строки в таблице, 27 раз. Я могу легко добавить «Distinct» или «Top 1», когда я вызываю функцию, но мне не нужно.Почему моя скалярная функция UDF возвращает более одной строки?

Вот код функции:

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.

+0

Это потому, что у вас есть 27 строк в 'dbo.DailyIncome'. –

+1

Скалярный UDF возвращает одно значение * не одну строку *. –

ответ

2

Это потому, что у вас есть 27 строк в dbo.DailyIncome. UDF вызывается один раз для каждой строки. Возможно, вы хотите что-то вроде этого:

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

Это исправление. Я, очевидно, новичок в использовании этой функции, поэтому я не понимал, что мне не нужен оператор From. Спасибо! –

+0

Нет проблем. Рад помочь! –

Смежные вопросы