hierarchyid
这个数据类型是 MSSQL 2008 开始支持的一个新的数据类型,用于表示树形结构中的位置。
当时以为使用 hierarchyid
可以做到无限分层的分类,其实并不。MSDN 上就提示说:hierarchyid
类型中所用的编码限制为 892 字节。所以如果节点字节数可能会超过 892 字节,就无法使用 hierarchyid
数据类型。MSDN的介绍。
先墨迹下拷贝介绍 hierarchyid
的函数。hierarchyid
列出树形的全部子树数量的 SQL 语句在最后。
hierarchyid
系统类型提供了 10 个函数来实现各种功能,分别是:
GetAncestor( n ) :返回表示 this 的第 n 个祖先的 hierarchyid
。
如果传递的数字大于 GetLevel()
,则返回 NULL
。如果传递的是负数,则引发异常。
GetDescendant( child1 , child2 ) :返回父级的一个子节点。
返回作为父节点的后代的一个子节点。
- 如果父级为
NULL
,则返回 NULL
。
- 如果父级不为
NULL
,而 child1
和 child2
为 NULL
,则返回父级的子级。
- 如果父级和
child1
不为 NULL
,而 child2
为 NULL
,则返回一个大于 child1
的父级的子级。
- 如果父级和
child2
不为 NULL
,而 child1
为 NULL
,则返回一个小于 child2
的父级的子级。
- 如果父级、
child1
和 child2
都不为 NULL
,则返回一个大于 child1
且小于 child2
的父级的子级。
- 如果
child1
不为 NULL
且不是父级的子级,则引发异常。
- 如果
child2
不为 NULL
且不是父级的子级,则引发异常。
- 如果
child1
>= child2
,则引发异常。
GetDescendant
是确定的,因此,如果使用相同的输入调用 GetDescendant()
,它将始终生成相同的输出。不过,生成的子级的确切身份可能因其与其他节点的关系而异。
Read More →