您的位置 首页 数据库

SQL SERVER 2008 CTE生成结点的FullPath

武先生个人博客(www.wujiexiang.com)提供CTE,FullPath,等网页设计素材资源,提供相关网页设计资源的教程和免费下载。武先生个人博客,专业织梦网页设计模板资源站。。

  • 教程正文

好的,现在来看如何生成FullPath:


代码如下:

DECLARE @tbl TABLE

(

Id int

,ParentId int

)

INSERT INTO @tbl

( Id, ParentId )

VALUES ( 0, NULL )

, ( 8, 0 )

, ( 12, 8 )

, ( 16, 12 )

, ( 17, 16 )

, ( 18, 17 )

, ( 19, 17 )

WITH abcd

AS (

— anchor

SELECT id

,ParentID

,CAST(id AS VARCHAR(100)) AS [Path]

FROM @tbl

WHERE ParentId IS NULL

UNION ALL

–recursive member

SELECT t.id

,t.ParentID

,CAST(a.[Path] + ‘,’ + CAST( t.ID AS VARCHAR(100)) AS varchar(100)) AS [Path]

FROM @tbl AS t

JOIN abcd AS a ON t.ParentId = a.id

)

SELECT Id ,ParentID ,[Path]

FROM abcd

WHERE Id NOT IN ( SELECT ParentId

FROM @tbl

WHERE ParentId IS NOT NULL )

返回:

Id ParentID Path

———– ———– ———————-

18 17 0,8,12,16,17,18

19 17 0,8,12,16,17,19

就这么简单,实际上有Sql server 2008中HierarchyType 也能很好的解决这个问题。我将在后面写一些关于HierarchyType的Post.

希望这篇POST对您有帮助。

Author Peter Liu

上一篇:关于sqlserver 2005 使用临时表的问题( Invalid object name #te

下一篇:SQL Server2005打开数据表中的XML内容时报错的解决办法

本文来自网络,不代表武先生个人博客立场,转载请注明出处:https://www.wujiexiang.com/devops/sql/930.html

作者: wuadin

广告位

发表评论

电子邮件地址不会被公开。 必填项已用*标注

联系我们

联系我们

18530226930

在线咨询: QQ交谈

邮箱: 345424724@qq.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部