请你帮我检查一个具有hierarchyid '/1/1/' 的节点是否有(或没有)一个具有hierarchyid '/1/1/X' 的子节点?
2 回答
0
这将返回指定项的所有子项,就像您喜欢的那样:
DECLARE @DemoTable AS TABLE
(
Id int identity(1, 1) primary key,
Hierarchy hierarchyid,
Name varchar(100)
)
INSERT INTO @DemoTable (Hierarchy, Name) VALUES ('/', 'Universe')
INSERT INTO @DemoTable (Hierarchy, Name) VALUES ('/1/', 'Milky Way')
INSERT INTO @DemoTable (Hierarchy, Name) VALUES ('/2/', 'Andromeda')
INSERT INTO @DemoTable (Hierarchy, Name) VALUES ('/1/1/', 'Solar System')
INSERT INTO @DemoTable (Hierarchy, Name) VALUES ('/1/1/1/', 'Mercury')
INSERT INTO @DemoTable (Hierarchy, Name) VALUES ('/1/1/2/', 'Venus')
INSERT INTO @DemoTable (Hierarchy, Name) VALUES ('/1/1/3/', 'Earth')
INSERT INTO @DemoTable (Hierarchy, Name) VALUES ('/1/1/3/1/', 'Moon')
INSERT INTO @DemoTable (Hierarchy, Name) VALUES ('/1/1/4/', 'Mars')
--
-- All children Solar System
--
SELECT
T.Hierarchy.GetLevel() as Level,
T.Hierarchy.ToString() as Hierarchy,
T.Name
FROM @DemoTable T
JOIN @DemoTable P ON
T.Hierarchy.GetAncestor(1) = P.Hierarchy
WHERE P.Name = 'Solar System'
ORDER BY
T.Hierarchy
于 2014-08-22T20:29:16.143 回答
0
您可以通过查看 hierarchyid 是否在其正下方的级别上有任何子级来检查这一点。
DECLARE @hierarchyID hierarchyid
SET @hierarchyID = '/1/1/'
SELECT CASE
WHEN EXISTS (
SELECT 1
FROM HierarchyTable
WHERE HierarchyIDColumn.IsDescendantOf(@hierarchyID) = 1
AND HierarchyIDColumn.GetLevel() = @hierarchyID.GetLevel() + 1
)
THEN 1
ELSE 0
END AS HasImmediateChildren
于 2017-09-15T18:14:21.920 回答