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

TSQL中如何使用cursor循环、查询并拼接psrid父子层级的描述字符串

实现方案

你需要的是向上遍历层级拼接路径的功能,使用SQL Server的递归CTE(公用表表达式)实现会比游标更简洁高效,完整存储过程代码如下:

CREATE PROCEDURE GetPsridFullPath
    @input_psrid INT
AS
BEGIN
    SET NOCOUNT ON;
    
    WITH HierarchyCTE AS
    (
        -- 锚点查询:定位到输入的psrid对应行
        SELECT 
            psrid,
            parent_psrid,
            description,
            CAST(description AS NVARCHAR(MAX)) AS full_path,
            0 AS hierarchy_level
        FROM Book2
        WHERE psrid = @input_psrid

        UNION ALL

        -- 递归查询:向上匹配父级
        SELECT 
            t.psrid,
            t.parent_psrid,
            t.description,
            CAST(CONCAT(t.description, ' > ', h.full_path) AS NVARCHAR(MAX)) AS full_path,
            h.hierarchy_level + 1
        FROM Book2 t
        INNER JOIN HierarchyCTE h ON t.psrid = h.parent_psrid
    )
    -- 层级最高的记录就是完整拼接结果
    SELECT TOP 1 full_path FROM HierarchyCTE
    ORDER BY hierarchy_level DESC
END
GO

使用示例

执行存储过程传入需要查询的psrid即可:
EXEC GetPsridFullPath @input_psrid = 10
返回结果:
Work Management > Asset Maintenance > Asset

说明

  1. 递归CTE会自动向上遍历直到父级psrid为NULL,不需要手动控制循环逻辑
  2. 相比游标方案代码更简洁,执行性能也更优
  3. 如果你的SQL Server版本不支持CONCAT函数,可替换为+拼接,注意添加NULL判断即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:39:03