hierarchyid数据类型如何工作?

时间:2010-07-14 14:38:57

标签: sql-server-2008 user-defined-types

我想在SQL Server 2005中创建一个CLR用户定义类型,它具有与hierarchyid建模层次结构相同的性能优势。

有没有人有任何想法/指针?

2 个答案:

答案 0 :(得分:3)

我找到了 - 如何实现hierarchyId。这是一个名为ORDPATH的光滑比特算法。

http://www.cs.umb.edu/~poneil/ordpath.pdf

(来自:http://sqlkpi.com/BLOGS/BOBB/post/ORDPATH-ORDPATH-everywhere.aspx

这可能是一个有趣的侧面项目。

答案 1 :(得分:2)

SQL Server使用基于但不同于ORDPATH的编码对hierarchyid进行编码。

您可以在[MS-SSCLRT]: Microsoft SQL Server CLR Types Serialization Formats中找到hierarchyid的“物理表示”。总结一下:

  1. 使用可变长度编码将n中的每个数字hierarchyid编码为位字符串。如果.中的nhierarchyid后面n+1,则编码n而不是a

    位串的长度不必是8的倍数!

    此处包含编码的详细信息太长。请注意,编码必须支持负整数,零和正整数。它也必须是订单保留。也就是说,对于具有编码be(a)的整数e(b)a > b,如果e(a) > e(b),则/(当编码以字典方式进行比较时)。

  2. 如果数字后跟.,则在位字符串中附加1。如果{{1}}跟在数字后面,则在位串附加0。

  3. 连接所有位字符串。

  4. 将0添加到步骤3的结果中,直到长度为8的倍数。(如果它已经是8的倍数,则您不会在此处附加任何0。)

    < / LI>