【发布时间】:2019-04-05 08:45:42
【问题描述】:
我有以下CREATE FUNCTION:
CREATE FUNCTION ufnTotalSales (@StartDate datetime, @EndDate datetime = GETDATE(), @FoodName nvarchar(50) = '')
RETURNS TABLE
AS
RETURN
(
IF @FoodName = '';
BEGIN
SELECT f.FoodID, FoodName, (FoodPrice * Quantity) AS TotalSales FROM Food f, OrderFoodRel ofr
WHERE (Date_Time BETWEEN @StartDate AND @EndDate)
END
ELSE
BEGIN
SELECT f.FoodID, FoodName, (FoodPrice * Quantity) AS TotalSales FROM Food f, OrderFoodRel ofr
WHERE (Date_Time BETWEEN @StartDate AND @EndDate) AND @FoodName = FoodName
END
);
第一个错误发生在@EndDate datetime = GETDATE(),它显示Incorrect syntax near '()'。如果用户选择使用默认值,我正在尝试为@EndDate 参数分配当前datetime 的默认值,但不知何故我得到了错误。
第二个错误发生在我在IF ... ELSE 块中使用的所有参数(@FoodName、@StartDate 和@EndDate)。它说我Must declare the scalar variable "@..."。它是一个参数而不是一个标量变量,我该如何解决这个问题?
这个函数的想法是返回食品的总销售额,有两个选项:一个是名称为 X 的食品从某个日期到另一个日期的总销售额,如果您指定了食品名称;和两个是从一个日期到另一个日期的食品总销售额,不考虑食品名称。
【问题讨论】:
-
OrderFoodRel 和 Food 是如何关联的
-
@SanalSunny 它们使用来自 Food (FoodID) 的主键相关联。 OrderFoodRel 有一个指向所述主键的外键 FoodID。