我是HierarchyId世界的新手,并尝试将HierarchyId()实现到我的SQLServer设计中,我的印象是SQL Server每个表只允许每个列一个Root节点,如果我尝试了一个像有一个Root节点然后它应该出错或抛出一些警告:
INSERT INTO dbo.TeamHierarchy
( TeamNode, TeamId, TeamNodeName )
VALUES ( HierarchyId::GetRoot(), -- TeamNode - hierarchyid
1, -- TeamId - int
'TeamContainer' -- TeamNodeName - varchar(50)
)
我的假设基于我读到的一些主题:
SQL 2008 HierarchyID with Multiple Root Nodes
但是,似乎SQL服务器在拥有多个根时没有任何问题,因为上面的插入查询完全正常,没有任何错误/警告。自从我使用SQL Server 2012以来,自SQL Server 2008以来有什么变化吗?或者我身边有任何误会?
答案 0 :(得分:1)
与任何其他非主键列一样,如果值不受约束,则列中可以包含多个值。 HierarchyID也不例外。如果HierarchyID不是主键,则可以为您的用例提供多个根。但是,如果要约束节点,则需要将HierarchyID设置为主键,然后只能有1个根,根目录下有许多节点。
Microsoft在此讨论如何强制执行唯一性:
https://technet.microsoft.com/en-us/library/Bb677212(v=SQL.105).aspx