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 →