gpt4 book ai didi

HierarchyID 如何从 child 那里获得所有 parent

转载 作者:行者123 更新时间:2023-12-04 14:51:31 28 4
gpt4 key购买 nike

我有一个菜单的hierarchyID 和UserRights 的问题。例如,我只想授予用户 4 级的权限,我的查询应该自动从 4 级子级中选择所有父级。
这该怎么做 ?

你明白我的问题吗?我只是想要一个 child 的所有 parent (祖先)。

问候曼努埃尔

最佳答案

我最近一直在与 HierarchyId 一起工作,我遇到了这个问题,正在寻找另一个问题的答案。我想我会把这个例子混在一起,因为它说明了一些事情。首先,您可以在没有递归 CTE 的情况下获得条件表达式。其次,GetDescendantOf 是包容性的,因此您无需检查 t1.NodeId = t2.NodeId (我通常更喜欢连接到子查询)。这是您可以玩的完整演示:

BEGIN TRANSACTION

CREATE TABLE #HierarchyDemo
(
NodeId HIERARCHYID PRIMARY KEY NOT NULL,
Description AS NodeId.ToString(),
Depth AS NodeId.GetLevel()
)

INSERT INTO #HierarchyDemo VALUES ( HierarchyId::GetRoot() );
INSERT INTO #HierarchyDemo VALUES ( CAST ('/1979/' AS HIERARCHYID) );
INSERT INTO #HierarchyDemo VALUES ( CAST ('/2012/' AS HIERARCHYID) );
INSERT INTO #HierarchyDemo VALUES ( CAST ('/2012/2/' AS HIERARCHYID) );
INSERT INTO #HierarchyDemo VALUES ( CAST ('/1979/4/' AS HIERARCHYID) );
INSERT INTO #HierarchyDemo VALUES ( CAST ('/2012/2/17/' AS HIERARCHYID) );
INSERT INTO #HierarchyDemo VALUES ( CAST ('/1979/4/6/' AS HIERARCHYID) );

SELECT *
FROM #HierarchyDemo;

SELECT *
FROM #HierarchyDemo startingPoint
INNER JOIN #HierarchyDemo parent
ON startingPoint.NodeId.IsDescendantOf(parent.NodeId) = 1
WHERE startingPoint.Description = '/2012/2/17/'

ROLLBACK TRANSACTION

关于HierarchyID 如何从 child 那里获得所有 parent ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5348776/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com