我在 SQL 中使用 HierarchyId 来存储数据。我正在关注这里的教程:
http://www.codeproject.com/Tips/740553/Hierarchy-ID-in-SQL-Server
示例中提到的示例明确指定了节点的位置:
DECLARE @parent HierarchyId = (SELECT Node FROM H WHERE Name = 'Thuru')
DECLARE @jhony HierarchyId = (SELECT Node FROM H WHERE name = 'Johnny')
INSERT INTO H (Node,ID,Name) VALUES (@parent.GetDescendant(@jhony,NULL), 3, 'Robert')
代码告诉 SQl 哪些是这个特定节点的兄弟节点。这没关系。但是,我想要的只是在特定父级下的树中的任何位置插入节点。这意味着我希望能够使用类似的东西:
DECLARE @parent HierarchyId = HierarchyId::GetRoot()
INSERT INTO H (Node,ID,Name) VALUES (@parent.GetDescendant(NULL,NULL),2,'Johnny')
意思是
- 只要节点插入到正确的父节点下,我们不关心节点的水平定位
- 当我尝试 GetDescendant(NULL,NULL) 为同一父项进行多次插入时,它为每个子项提供了相同的路径 /1/。这是为什么?
- 另外,我遇到了以下链接:https ://technet.microsoft.com/en-us/library/bb677212%28v=sql.105%29.aspx 。它显示了为特定父级存储最后插入的子级的示例,然后在将其插入到数据库中进行任何进一步插入之前将其用作参考。它是插入具有层次结构的表以获得路径唯一性的标准方法吗?