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
说明
- 递归CTE会自动向上遍历直到父级psrid为NULL,不需要手动控制循环逻辑
- 相比游标方案代码更简洁,执行性能也更优
- 如果你的SQL Server版本不支持
CONCAT函数,可替换为+拼接,注意添加NULL判断即可
内容的提问来源于stack exchange,提问作者Mixer
相关产品推荐
相关产品推荐

