SQL Server如何查询指定用户下所有层级汇报链的下属员工ID
SQL Server 不定层级汇报链下属查询方案
你可以用**递归公用表达式(CTE)**实现该需求,无需提前获知汇报链的最大层级,具体实现代码如下:
-- 定义要查询的目标用户ID DECLARE @TargetUserID INT = 1; -- 递归CTE遍历所有下属 WITH SubordinateCTE AS ( -- 锚点成员:获取目标用户的直接下属 SELECT UserID, ReportsToUserID FROM 用户表名 -- 替换成你实际的表名 WHERE ReportsToUserID = @TargetUserID UNION ALL -- 递归成员:获取所有下属的下级用户 SELECT u.UserID, u.ReportsToUserID FROM 用户表名 u INNER JOIN SubordinateCTE s ON u.ReportsToUserID = s.UserID ) -- 输出所有下属的用户ID SELECT UserID FROM SubordinateCTE;
效果验证
- 当
@TargetUserID = 1时,返回结果为3、6,符合预期 - 当
@TargetUserID = 2时,返回结果为4、5、7,符合预期
注意事项
- 请将代码中的
用户表名替换为你实际的用户表名称 - SQL Server默认递归层级上限为100,如果你的汇报链层级超过100,可以在查询末尾添加层级上限配置,比如设置最大层级为1000:
如果需要取消层级限制,可以设置为SELECT UserID FROM SubordinateCTE OPTION (MAXRECURSION 1000);MAXRECURSION 0,注意提前排查是否存在循环汇报的异常数据(比如A的上级是B,B的上级是A),避免出现无限递归。
内容的提问来源于stack exchange,提问作者goxarad784
相关产品推荐
相关产品推荐

