SQL Server“不允许”多个根吗?

时间:2015-02-10 01:56:11

标签: sql-server sql-server-2008 sql-server-2012 hierarchyid

我是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以来有什么变化吗?或者我身边有任何误会?

1 个答案:

答案 0 :(得分:1)

与任何其他非主键列一样,如果值不受约束,则列中可以包含多个值。 HierarchyID也不例外。如果HierarchyID不是主键,则可以为您的用例提供多个根。但是,如果要约束节点,则需要将HierarchyID设置为主键,然后只能有1个根,根目录下有许多节点。

Microsoft在此讨论如何强制执行唯一性:
https://technet.microsoft.com/en-us/library/Bb677212(v=SQL.105).aspx