将hierarchyid转换为其词法顺序与hierarchyid深度优先顺序相同的字符串

w.b*_*ian 6 t-sql sql-server sql-server-2008

我想知道是否有一种合理的,高效的方法将hierarchyid值转换为一个字符串排序保持其自然深度优先排序的字符串.

谢谢!

Rob*_*ley 6

根据下面的代码(在AdventureWorks2008上运行它),您可以使用样式1转换为varbinary然后转换为nvarchar.如果没有样式1,则不能正确排序.

select convert(nvarchar(20),convert(varbinary(20),OrganizationNode,1),1)
        as OrderableString,
       OrganizationNode.ToString() as ReadableString,
       convert(nvarchar(20),OrganizationNode) as ReadableString2
from humanresources.employee
order by strNode;
Run Code Online (Sandbox Code Playgroud)

一些订单给出:

OrderableString     ReadableString  ReadableString2
0x7AD744    /3/1/1/8/   /3/1/1/8/
0x7AD74C    /3/1/1/9/   /3/1/1/9/
0x7AD754    /3/1/1/10/  /3/1/1/10/
0x7AD75C    /3/1/1/11/  /3/1/1/11/
0x7AD764    /3/1/1/12/  /3/1/1/12/
0x7ADA      /3/1/2/     /3/1/2/
0x7ADAB0    /3/1/2/1/   /3/1/2/1/
0x7ADAD0    /3/1/2/2/   /3/1/2/2/
Run Code Online (Sandbox Code Playgroud)