表示Sql Server中的树结构,包括虚拟路径

时间:2011-01-05 13:58:06

标签: sql sql-server hierarchy hierarchyid materialized-path-pattern

您好我想在sql数据库中创建树结构。我需要具备以下属性。

  • 快速选择
  • 只需像Cat2 / Cat4这样的字符串即可轻松选择 - >返回Cat5&六类
  • 支持虚拟类别
  • 插入应该很容易,但与快速选择
  • 相比并不重要
  • 删除与插入相同,很容易就会很好,但同样能够快速选择更重要
  • 重新排序再次不如选择
  • 那么重要

alt text

我查看了Materialized-Path和hierarchyId,但是大多数示例都使用像AdventureWorks这样的示例,这对我来说太复杂了。

仅供记录我使用Sql Server 2008 R2和C#4.0

2 个答案:

答案 0 :(得分:1)

SQL Server支持recursive CTEs,它们可能对您有帮助。

您可以使用以下SQL从数据构建树结构:

WITH cat_tree AS (
  SELECT cat_id, cat_name, parent_id,
         0 AS level, CAST('0' AS varchar(90)) AS path
    FROM cats
   WHERE parent_id IS NULL
  UNION ALL
  SELECT c.cat_id, c.cat_name, c.parent_id,
      ct.level + 1,
      CAST(ct.path+'.'+CAST(
       (row_number() OVER (ORDER BY ct.cat_id)) AS varchar) AS varchar(90))
    FROM cats c
    JOIN cat_tree ct ON c.parent_id = ct.cat_id)
SELECT * FROM cat_tree
 ORDER BY path;

查看SQL Fiddle上的搜索结果。

答案 1 :(得分:0)

也许看一下嵌套集?见Joe Celko。