我有一个由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_employees
的SELECT
数据,那么您需要执行以下操作:With accessed_employees (...) as (...) SELECT * FROM accessed_employees;