2015-02-10 83 views
0

我對HierarchyId世界非常陌生,並且試圖在我的SQLServer設計中實現HierarchyId(),我的印象是SQL Server每個表只允許一個根節點每列,並且如果我嘗試了類似於如果表已經有根節點,那麼它應該出錯誤或拋出一些警告:SQL Server「不允許」多個根嗎?

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 Server會在擁有多個根目錄時沒有任何問題因爲上面的插入查詢工作得很好,沒有任何錯誤/警告。自從我使用SQL Server 2012以來SQL Server 2008發生了任何變化?或者我的身邊有任何誤解?

回答

1

與其他任何非主鍵列一樣,如果值不受限制,則可以在列中包含多個值。 HierarchyID也不例外。如果HierarchyID不是主鍵,那麼您的用例可以有多個根。但是,如果要約束節點,則需要將HierarchyID設置爲主鍵,那麼您只能擁有1個根,且在根下有許多節點。

微軟討論如何強制唯一性在這裏:
https://technet.microsoft.com/en-us/library/Bb677212(v=SQL.105).aspx