对 SQL 层次结构数据类型中的节点重新排序
在 SQL 2008 上使用层次结构数据类型。层次结构中的节点如下所示:
value node
36 /8/1/
38 /8/2/
34 /8/3/
40 /8/4/
42 /8/5/
44 /8/6/
46 /8/7/
48 /8/8/
我想重新排列节点,以便 /8/3/ 和 /8/1/ 交换位置。关于如何做到这一点有什么想法吗?
到目前为止,我唯一的想法是,我将所有节点加载到数组中的某个级别上,按照我想要的方式对它们进行排序,从表中删除它们并以排序的形式插入。
Using Hierarchy data type on SQL 2008. Nodes in my hierarchy go like this:
value node
36 /8/1/
38 /8/2/
34 /8/3/
40 /8/4/
42 /8/5/
44 /8/6/
46 /8/7/
48 /8/8/
I'd like to rearrange nodes so that /8/3/ and /8/1/ switch places. Any idea on how to do this?
Only idea that I have so far is that I load all nodes on a level in Array, order them the way I want them to be, delete them from table and insert in sorted form.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果(就像在您的示例中)您提前知道要操作的hierarchyid值,您可以直接执行此操作,例如:
如果您需要动态获取新的hierarchyid值,请查看GetDescendant() 和 GetAncestor() 函数。使用它,该示例将如下所示:
请注意,在此示例中,hierarchyid 不会保持相同。至少有一个最终会使用“分数”来表示其位置(例如“/8/2.5/”而不是“/8/3/”)。
If (like in your example) you know the hierarchyid values you want to manipulate in advance, you can do it directly, e.g.:
If you need to get your new hierarchyid values dynamically, take a look into the GetDescendant() and GetAncestor() functions. Using that, the example would look something like this:
Note that the hierarchyids do not stay the same in this example. At least one will end up using a 'fraction' for its position (e.g. '/8/2.5/' instead of '/8/3/').
找到解决方案
http://technet.microsoft.com/en-us/library /bb677256.aspx
Found the solution
http://technet.microsoft.com/en-us/library/bb677256.aspx