0

我对 HierarchyId 世界非常陌生,并试图在我的 SQLServer 设计中实现 HierarchyId() 并且我的印象是 SQL Server 每个表的每个列只允许一个 Root 节点,如果表已经有一个 Root,我尝试如下node 那么它应该出错或抛出一些警告:

INSERT INTO dbo.TeamHierarchy
                ( TeamNode, TeamId, TeamNodeName )
        VALUES  ( HierarchyId::GetRoot(), -- TeamNode - hierarchyid
                  1, -- TeamId - int
                  'TeamContainer'  -- TeamNodeName - varchar(50)
                  )

我的假设是基于我阅读的一些线程:

具有多个根节点的 SQL 2008 HierarchyID

但是,似乎 SQL 服务器在拥有多个根时没有任何问题,因为上面的插入查询工作得非常好,没有任何错误/警告。自从我使用 SQL Server 2012 以来,自 SQL Server 2008 以来有什么变化吗?还是我这边有什么误会?

4

1 回答 1

1

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

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

于 2015-08-10T00:01:25.477 回答