gpt4 book ai didi

tsql - Sql Server 2008 递归存储过程

转载 作者:行者123 更新时间:2023-12-05 00:04:49 25 4
gpt4 key购买 nike

我需要在 SQL Server 2008 中创建一个存储过程,它将根据某个值更新一个表。这里的技巧是我需要递归搜索表,直到找到我要查找的值,然后更新当前记录。例如,我有一个包含 3 列的员工表:

员工ID

经理 ID

家庭 ID

对于表中的每个 EmployeeId,我想获取其 ManagerId。然后,如果 ManagerID != 0,去获取当前 ManagerId 的 ManagerId(每个 ManagerId 将指向一个 EmployeeId)——继续这个直到我到达顶级经理(其中 ManagerId == 0)。

找到顶级经理后,我想使用上述流程的最后一个 EmployeeId 的值更新启动流程的原始记录中的 FamilyId 列。

基本上我需要对表中的每条记录执行此操作。我正在尝试将 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

关于tsql - Sql Server 2008 递归存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5280585/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com