在SQL Anywhere上找不到相关名称

时间:2019-01-15 13:22:53

标签: tsql sql-function sqlanywhere

我有两个表,分别是 Employees Salarygroup 。 PersonalID是 Employees 的主键,而 SalaryID 是Salarygroup的主键。在“员工”表中,还有一行名为 StartDat 的行,该行具有日期数据类型并跟踪员工开始在公司工作的日期。此外, AmountInEuros 是员工每月获得的薪水,它具有数字数据类型

我需要创建一个函数,该函数可以计算员工到目前为止从公司收到的总金额,但是当我输入PersonalID时,我会看到一条错误消息:*未找到相关名称'Salarygroup'。 / p>

请问有人让我明白为什么会这样吗?

  ALTER FUNCTION "dba"."countTotalAmountOfMoney"(@PersonalID int)
   RETURNS int
   AS
   BEGIN
   DECLARE @totalAmountOfMoney int;
   SELECT  @totalAmountOfMoney = g.AmountInEuros * DATEDIFF(month, g.StartDat, 
        '2019-01-16') 
   FROM dba.Employees 
   Inner Join dba.Salarygroup s
   ON   dba.Employees.SalaryId = dba.Salarygroup.SalaryId

   RETURN @totalAmountOfMoney;
END

2 个答案:

答案 0 :(得分:1)

您已经为表指定了别名,因此您需要使用它。我建议对所有表使用别名:

DECLARE @totalAmountOfMoney int;

SELECT @totalAmountOfMoney = s.AmountInEuros * DATEDIFF(month, e.StartDat, '2019-01-16') 
FROM dba.Employees e INNER JOIN
     dba.Salarygroup s
     ON e.SalaryId = s.SalaryId
WHERE e.personalID = @PersonalID;

请注意,您的查询中未定义g别名。 StartDat来自Employees,因此我将其更改为e。我猜想AmountInEuros来自s

答案 1 :(得分:0)

也许您忘记了使用创建的Alias引用第二张表:

ALTER FUNCTION "dba"."countTotalAmountOfMoney"(@PersonalID int)
   RETURNS int
   AS
   BEGIN
   DECLARE @totalAmountOfMoney int;
   SELECT  @totalAmountOfMoney = g.AmountInEuros * DATEDIFF(month, g.StartDat, 
        '2019-01-16') 
   FROM dba.Employees 
   Inner Join dba.Salarygroup s
   ON   dba.Employees.SalaryId = s.SalaryId

   RETURN @totalAmountOfMoney;
END