给定路径“Applications/Accounting/Dashboard”,名为“Dashboard”的叶节点的hierarchyid是什么。我提出了此解决方案,但它是否是最佳解决方案?
我使用的表和数据中,父节点的所有子节点都具有唯一的名称。
CREATE TABLE [dbo].[Resources](
[Node] [hierarchyid] NOT NULL,
[Name] [nvarchar](50) NOT NULL
) ON [PRIMARY]
GO
INSERT [dbo].[Resources] ([Node], [Name]) VALUES (N'/', N'Resource Root')
INSERT [dbo].[Resources] ([Node], [Name]) VALUES (N'/1/', N'Applications')
INSERT [dbo].[Resources] ([Node], [Name]) VALUES (N'/1/1/', N'Accounting')
INSERT [dbo].[Resources] ([Node], [Name]) VALUES (N'/1/1/1/', N'Dashboard')
INSERT [dbo].[Resources] ([Node], [Name]) VALUES (N'/1/2/', N'Asset Management')
INSERT [dbo].[Resources] ([Node], [Name]) VALUES (N'/1/2/1/', N'Dashboard')
INSERT [dbo].[Resources] ([Node], [Name]) VALUES (N'/2/', N'Assets')
INSERT [dbo].[Resources] ([Node], [Name]) VALUES (N'/2/1/', N'X100022')
INSERT [dbo].[Resources] ([Node], [Name]) VALUES (N'/2/2/', N'X100017')
GO
“资源”表包含由路径“应用产品/会计/ Jmeter 板”表示的层次结构。下面的服务提供商将获取名为“ Jmeter 板”的叶节点。
我想知道是否可以在没有游标的情况下完成此操作。或者是否有更高性能的方法来完成此操作?
第一个
返回正确的0x 5AD 6。
1条答案
按热度按时间ncecgwcz1#
关于hierarchyid的使用,有一些很好的(但很冗长)说明,其中包括对GetAncestor()和GetChild()等方法的描述。
在sql中还有其他表示层次结构的方法,你可以考虑一下闭包表,如果你不担心存储图的边会占用额外的空间,在某些情况下闭包表会更有性能。