设置 :
MyTable (
NodeId varchar(10),
ParentNodeId varchar(10),
NodeName varchar(50)
)
NodeId 不是数字,可以采用任何形式。大多数是 Z123456 的形式,但有些是 12345。
我想使用 SqlServer HierarchyId 数据类型来满足我的分层需求。
问题:
我可以使用 CTE 生成具有节点和父级的层次结构,但我需要传递给 hierarchyid::Parse() 的路径 - 不幸的是,Z123456 形式的 nodeid 无法解析。如果 NodeId 和 ParentNodeId 是行 id 整数,我会收拾行李赶火车回家看我可爱的妻子,但相反,我在这里盯着 3360 x 1050 分辨率。
我正在使用 CTE 来生成我的层次结构(我也可以在 CTE 中创建一个路径),然后我附加行号给我唯一的整数 id,但我必须重新运行分层 CTE 到使用生成的 ID 生成我的路径。
;with o as (
select n.ParentNodeID, n.nodeid, n.NodeName, 1 as [level]
from Mytable n where n.ParentNodeID is null
union all
select n.ParentNodeID, n.nodeid, n.NodeName, o.[level] + 1 as [Level]
from MyTable n inner join o on n.ParentNodeID = o.NodeID
)
select NodeID, ParentNodeID, NodeDescription
, ROW_NUMBER() over (order by [level]) as hNodeId
from o
问题 :
无论如何我可以在一个 CTE 接受的表单中实现一个路径 hierarchyId::Parse() 吗?例如 /1/2/3/
TIA