如何在SQL Server 2005中实现高性能树视图

Sir*_*eno 5 sql database sql-server tree

构建表示树的表的最佳方法是什么?我想实现一个适用于大数据的选择,插入,更新和删除.例如,select必须支持"Expand ALL" - 获取给定节点的所有子节点(以及子节点).

Qua*_*noi 8

CTE的.

给定树状表结构:

id parent name
1  0      Electronics
2  1      TV
3  1      Hi-Fi
4  2      LCD
5  2      Plasma
6  3      Amplifiers
7  3      Speakers
Run Code Online (Sandbox Code Playgroud)

,此查询将返回id,parent深度级别,按树排序:

WITH    v (id, parent, level) AS
        (
        SELECT  id, parent, 1
        FROM    table
        WHERE   parent = 0
        UNION ALL
        SELECT  id, parent, v.level + 1
        FROM    v
        JOIN    table t
        ON      t.parent = v.id
        )
SELECT  *
FROM    v

id parent name
1  0      Electronics
2  1        TV
4  2          LCD
5  2          Plasma
3  1        Hi-Fi
6  3          Amplifiers
7  3          Speakers
Run Code Online (Sandbox Code Playgroud)

更换parent = 0parent = @parent得到的只有一棵树的一个分支.

如果有索引table (parent),则此查询将有效地处理非常大的表,因为它将递归地用于 INDEX LOOKUP查找每个父项的所有chilrden.

要更新某个分支,请发出:

WITH    v (id, parent, level) AS
        (
        SELECT  id, parent, 1
        FROM    table
        WHERE   parent = 0
        UNION ALL
        SELECT  id, parent, v.level + 1
        FROM    v
        JOIN    table t
        ON      t.parent = v.id
        )
UPDATE  table t
SET     column = newvalue
WHERE   t.id IN
        (
        SELECT  id
        FROM    v
        )
Run Code Online (Sandbox Code Playgroud)

哪个@parent是分支的根.