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

SQL Server递归遍历Type=2记录实现自动替换合并查询结果

SQL Server 递归查询实现方案

你需要的逻辑可以通过SQL Server自带的递归公用表表达式(CTE)直接实现,无需手动写循环执行语句,完整代码如下:

WITH RecursiveCTE AS (
    -- 锚点:执行初始查询,记录根节点ID用于后续替换
    SELECT 
        [ID],
        [ID] AS RootID,
        ID1,
        ID2,
        [Type]
    FROM [dbo].[Test_DB]
    WHERE ID1 = 29

    UNION ALL

    -- 递归节点:取上层Type=2的记录的ID2作为新查询的ID1参数
    SELECT
        t.[ID],
        r.RootID,
        t.ID1,
        t.ID2,
        t.[Type]
    FROM [dbo].[Test_DB] t
    INNER JOIN RecursiveCTE r ON t.ID1 = r.ID2
    WHERE r.[Type] = 2
)
-- 最终输出:替换ID1为根ID,过滤所有Type=2的记录
SELECT
    [ID],
    RootID AS ID1,
    ID2,
    [Type]
FROM RecursiveCTE
WHERE [Type] != 2
-- 递归层级超过100时打开下方注释,0代表不限制递归层级
-- OPTION (MAXRECURSION 0)

逻辑说明

  • 锚点部分执行你初始的查询逻辑,额外新增RootID字段存储每条记录对应的初始关联ID,保证后续子查询继承同一个根ID
  • 递归部分自动迭代查询所有Type=2的记录对应的ID2关联数据,直到没有符合条件的新数据为止
  • 最终查询直接将ID1替换为提前存储的RootID,同时过滤所有Type=2的记录,直接得到最终合并结果

注意事项

  • 该方案兼容SQL Server 2008及以上所有版本
  • 当递归层级超过默认的100层时,开启代码末尾的OPTION (MAXRECURSION 0)配置即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 03:45:07