SQL Server 2008中的表查询

我在SQL Server 2008数据库中有以下表格:

Id  Name       ParentFolder
--  ----       ------------
1   Europe     NULL
2   Asia       NULL
3   Germany    1
4   UK         1
5   China      2
6   India      2
7   Scotland   4

ParentFolder是同一个表中的FK到Id。 我想创建一个导致如下结果的视图:

Id  Name       FullName
--  ----       --------
1   Europe     Europe
2   Asia       Asia
3   Germany    Europe/Germany
4   UK         Europe/UK
5   China      Asia/China
6   India      Asia/India
7   Scotland   Europe/UK/Scotland

如您所见,我需要通过递归地使用ParentFolder关系任意次数来构建FullName值,直到找到NULL。

编辑。 表中的每一行都“知道”其他行是它的父级,但不知道它在层次结构中的绝对位置。 出于这个原因,每行将其绝对位置存储在分层树中的谱系系统将不合适。

我知道SQL Server 2008的hierarchyid功能,但据我所知,它只适用于固定数量的递归级别。 然而在我的情况下,你永远不知道你会找到多少个关卡,并且他们可能会因行而改变。

我也在这里看到类似的问题。 不过,我认为没有人会问为表格中的每一行建立“路径”。 对不起,如果我错过了。

非常感谢。


试试这个:

    DECLARE @tbl TABLE (
         Id INT
        ,[Name] VARCHAR(20)
        ,ParentId INT
        )

    INSERT INTO @tbl( Id, Name, ParentId )
    VALUES
     (1, 'Europe', NULL)
    ,(2, 'Asia',   NULL)
    ,(3, 'Germany', 1)
    ,(4, 'UK',      1)
    ,(5, 'China',   2)
    ,(6, 'India',   2)
    ,(7, 'Scotland', 4)
    ,(8, 'Edinburgh', 7)
    ,(9, 'Leith', 8)

    ;
WITH  abcd
        AS (
              -- anchor
            SELECT  id, [Name], ParentID,
                    CAST(([Name]) AS VARCHAR(1000)) AS "Path"
            FROM    @tbl
            WHERE   ParentId IS NULL
            UNION ALL
              --recursive member
            SELECT  t.id, t.[Name], t.ParentID,
                    CAST((a.path + '/' + t.Name) AS VARCHAR(1000)) AS "Path"
            FROM    @tbl AS t
                    JOIN abcd AS a
                      ON t.ParentId = a.id
           )
SELECT * FROM abcd

我不确定这是否适用于您的情况,但在本例中http://www.pure-performance.com/2009/03/managing-hierarchical-data-in-sql/有一些关于使用额外专栏,称为血统。

我用这个方法成功了。


听起来你应该检查Sql Sever的CLR支持。

CLR集成意味着您现在可以使用任何.NET Framework语言编写存储过程,触发器,用户定义类型,用户定义函数(标量和表值)以及用户定义的集合函数,包括Microsoft Visual Basic .NET和Microsoft Visual C#。

链接地址: http://www.djcxy.com/p/93881.html

上一篇: table query in SQL Server 2008

下一篇: order sql tree hierarchy