' End '附近语法错误



我有一个由8条关于员工的记录组成的数据库,它保存了Ssn(每个员工的id)和Super_ssn(引用他们的经理)。下面是创建表的代码:

Create Table t_employee
(
Ssn int not null,
Super_ssn int,
FirstName varchar(50),
LastName varchar(50),
NationalCode varchar(50),
_role varchar(50),
Primary key(Ssn),
Foreign Key(Super_ssn) references t_employee(Ssn)
);

这个数据库形成了一种树状结构,条件是每个员工只能访问他下属的信息,但是如果他的字段等于HRM然后他可以访问所有员工的信息。

我必须写一个procedure/function,它只有一个参数作为@employeeId,然后返回他所有的下级信息。

我已经写了下面的过程,但是它显示了

结束附近语法错误

Create Procedure returnAllChildren (@employeeId int)
as
Begin
Declare @empRole nvarchar(50)
Set @empRole = (Select _role From t_employee where Ssn = @employeeId)
if @empRole = 'HRM'
Begin
Select * From t_employee
End
Else
Begin
With accessed_employees (Ssn, FirstName, LastName, Super_ssn, NationalCode, _role, _level) as
(

Select emp.Ssn,
emp.FirstName,
emp.LastName,
emp.Super_ssn,
emp.NationalCode,
emp._role,
0 as _level
From t_employee AS emp
Where emp.Ssn = @employeeId
Union ALL
Select _emp.Ssn,
_emp.FirstName,
_emp.LastName,
_emp.Super_ssn,
_emp.NationalCode,
_emp._role,
_emp._level + 1
From t_employee _emp
Join accessed_employees a
on _emp.Super_ssn = a.Ssn
)
End -- Here is the problem
End

我不知道为什么会这样。所有的Begin ... End都是成对的,我不能理解它的原因。

我将非常感谢任何帮助,关于如何解决这个错误或其他方法来实现这个问题。

您使用With accessed_employees (...) as (...)定义了一个CTE,但没有对其执行任何操作,因此查询是不完整的。例如,如果您正在寻找accessed_employeesSELECT数据,那么您需要执行以下操作:With accessed_employees (...) as (...) SELECT * FROM accessed_employees;

相关内容

  • 没有找到相关文章

最新更新