Sco*_*ott 4 t-sql recursion stored-procedures sql-server-2008
我需要在SQL Server 2008中创建一个存储过程,它将根据某个值更新表.这里的技巧是我需要递归搜索表,直到找到我要查找的值,然后更新当前记录.例如,我有一个包含3列的Employees表:
员工ID
经理ID
FAMILYID
对于表中的每个EmployeeId,我想获得它的ManagerId.然后,如果ManagerID!= 0,去获取当前ManagerId的ManagerId(每个ManagerId将指向一个EmployeeId) - 继续执行此操作直到我到达顶级管理器(其中ManagerId == 0).
一旦找到顶级管理器,我想更新原始记录中的FamilyId列,该记录以上述过程的最后一个EmployeeId的值启动该过程.
基本上我需要对表中的每条记录执行此操作.我正在尝试将FamilyId设置为层次结构中所有员工和经理的根管理器的值.
我不确定是否应该使用游标或CTE来完成这项工作 - 或者只是在代码中执行此操作.
任何帮助是极大的赞赏.
谢谢!
您还可以使用递归CTE.
;WITH Hierarchy
As (SELECT EmployeeId AS _EmployeeId,
ManagerId AS _ManagerId,
EmployeeId AS _FamilyId
FROM @Employee
WHERE ManagerId = 0
UNION ALL
SELECT e.EmployeeId,
e.ManagerId,
h._FamilyId
FROM @Employee e
JOIN Hierarchy h
ON h._EmployeeId = e.ManagerId)
UPDATE @Employee
SET FamilyId = _FamilyId
FROM Hierarchy h
WHERE EmployeeId = _EmployeeId
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1697 次 |
| 最近记录: |