我有两个表,分别是 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
答案 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