我试图在存储过程中使用两个表但是在最后一行上出现此错误 ''多部分标识符T.HireDate无法绑定''
我猜它与表的加入有关,但有点迷失。继承我的代码:
CREATE PROC spPayIncreaseCheck
AS
SELECT T.ID,FName,LName,HireDate,Payrate
FROM Assignment.dbo.Payments pay
join Assignment.dbo.Teachers T
ON pay.ID = T.ID
UPDATE Assignment.dbo.Payments
SET Payrate = 'High'
where T.HireDate < dateadd(year, -3, GETDATE())
答案 0 :(得分:1)
您正在更新Assignment.dbo.Payments表,并且在WHERE条件中您有t.HireDate但t不是UPDATE语句中使用的别名。 在UPDATE中,您不能使用别名。
另外,请注意SELECT和UPDATE语句在存储过程中完全不相关。目前尚不清楚你是否需要将它们联系起来。
您需要UPDATE FROM来执行基于集合的更新:
UPDATE Assignment.dbo.Payments
SET Payrate = 'High'
FROM
SELECT T.ID,FName,LName,HireDate,Payrate
FROM Assignment.dbo.Payments pay
JOIN Assignment.dbo.Teachers T ON pay.ID = T.ID
WHERE T.HireDate < DATEADD(YEAR, -3, GETDATE())
答案 1 :(得分:1)
您是尝试update
,还是尝试select
?
对于在SQL Server中使用连接的update
,这是错误的形式。
正确的形式是这样的:
update pay
set Payrate = 'High'
from Assignment.dbo.Payments pay
inner join Assignment.dbo.Teachers T
on pay.ID = T.ID
where T.HireDate < dateadd(year, -3, getdate());
另外,您确定on pay.ID = T.ID
是正确的连接子句吗?通常情况下,您会看到类似on pay.TeacherID = T.ID
的内容。
答案 2 :(得分:1)
实现此目的的最简单方法是使用exists clause检查付款记录是否与教师记录相符:
update Assignment.dbo.Payments
set Payrate = 'High'
where exists ( select 1
from Assignment.dbo.Teachers
where Payments.ID = Teachers.ID
and Teachers.HireDate < dateadd(year, -3, getdate()) )