gpt4 book ai didi

sql-server - 具有多个根节点的 SQL 2008 HierarchyID

转载 作者:行者123 更新时间:2023-12-01 21:16:28 30 4
gpt4 key购买 nike

我想使用 SQL Server 2008 中新的 HierarchyID 类型来处理小型 wiki 应用程序中的页面关系。但是,它需要有多个根节点,因为每个帐户的每个主要文章/页面都将是一个根节点。

据我所知,HierarchyID 类型仅允许每列 1 个根节点,这是正确的吗?有什么方法可以启用多个根节点吗?

最佳答案

我一直在进行一些测试,看来您不需要带有根 HierarchyID 的记录。

例如,通常您会有一个根节点(级别 1)和多个子节点,但您可以跳过根节点,没有根记录,只有从级别 2 开始的记录:

//table schema
CREATE TABLE [Entity](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Name] [varchar](50) NOT NULL
[Hierarchy] [hierarchyid] NOT NULL,
CONSTRAINT [PK_Entity] PRIMARY KEY CLUSTERED
(
[ID] ASC
)
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

//Insert first 'root', which is technicall a child without a parent
INSERT INTO [Entity]
([Name]
,[Description]
,[Hierarchy])
VALUES
('Root A'
,hierarchyid::GetRoot().GetDescendant(NULL,NULL))


//Create the second 'root'
INSERT INTO [Entity]
([Name]
,[Hierarchy])
VALUES
('Root B'
,hierarchyid::GetRoot().GetDescendant((select MAX(hierarchy) from entity where hierarchy.GetAncestor(1) = hierarchyid::GetRoot()),NULL))

现在,如果您选择表中的所有行,您将看到:

SELECT [ID]
,[Name]
,[Hierarchy],
[Hierarchy].ToString()
FROM [Entity]

ID    Name      Hierarchy  (No column name)
1     Root A    0x58          /1/
2     Root B    0x68          /2/

我不确定这是否是推荐的做法,但从概念上讲,它允许您拥有多个根,只要您将树中的第二层视为根

关于sql-server - 具有多个根节点的 SQL 2008 HierarchyID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1352778/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com