我想在SQL Server 2005中创建一个CLR用户定义类型,它具有与hierarchyid建模层次结构相同的性能优势。
有没有人有任何想法/指针?
答案 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
的“物理表示”。总结一下:
使用可变长度编码将n
中的每个数字hierarchyid
编码为位字符串。如果.
中的n
跟hierarchyid
后面n+1
,则编码n
而不是a
。
位串的长度不必是8的倍数!
此处包含编码的详细信息太长。请注意,编码必须支持负整数,零和正整数。它也必须是订单保留。也就是说,对于具有编码b
和e(a)
的整数e(b)
和a > b
,如果e(a) > e(b)
,则/
(当编码以字典方式进行比较时)。
如果数字后跟.
,则在位字符串中附加1。如果{{1}}跟在数字后面,则在位串附加0。
连接所有位字符串。
将0添加到步骤3的结果中,直到长度为8的倍数。(如果它已经是8的倍数,则您不会在此处附加任何0。)
< / LI> 醇>