tsql – 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
相关文章
相关标签/搜索