You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL Server中高效更新树形结构的MyTeam字段

用单条UPDATE语句高效填充MyTeam字段

针对你的层级结构表,我们可以通过**递归CTE(公共表表达式)**获取每个职位及其所有下属的职位列表,再用字符串聚合函数快速拼接,最终完成批量更新。以下是具体实现:

假设你的表名为JobHierarchy,执行以下语句即可:

WITH RecursiveJobs AS (
    -- 锚点成员:初始节点(每个职位自身)
    SELECT 
        ID, 
        Job, 
        ID AS RootID
    FROM JobHierarchy

    UNION ALL

    -- 递归成员:获取所有下级职位
    SELECT 
        j.ID, 
        j.Job, 
        r.RootID
    FROM JobHierarchy j
    INNER JOIN RecursiveJobs r ON j.ParentID = r.ID
)
UPDATE jh
SET MyTeam = agg.JobList
FROM JobHierarchy jh
INNER JOIN (
    SELECT 
        RootID, 
        STRING_AGG(Job, ', ') AS JobList
    FROM RecursiveJobs
    GROUP BY RootID
) agg ON jh.ID = agg.RootID;

关键说明:

  • 递归CTE RecursiveJobs:先把每个职位作为根节点,再通过ParentID关联遍历所有层级的下属,将所有下属职位绑定到对应的根节点上。
  • 字符串聚合:使用STRING_AGG(SQL Server 2017+支持)将同一根节点下的职位拼接成逗号分隔的字符串;若用更低版本,可替换为STUFF((SELECT ', ' + Job FROM RecursiveJobs WHERE RootID = r.RootID FOR XML PATH('')), 1, 2, '')实现相同效果。
  • 批量更新:通过聚合结果关联原表,一次性完成所有MyTeam字段的更新,彻底避免循环带来的性能损耗。

内容的提问来源于stack exchange,提问作者asmgx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 00:50:22