posts - 930,  comments - 588,  views - 402万
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

       SQL SERVER 2008 使用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 http://wintersun.cnblogs.com

posted on   PetterLiu  阅读(503)  评论(0编辑  收藏  举报
编辑推荐:
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
阅读排行:
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
点击右上角即可分享
微信分享提示