यहाँ एक है जो मेरे लिए ट्रिक करता है:
@ParentID पदानुक्रम में केवल एक प्रारंभिक बिंदु है, लेकिन आप 0 में पास कर सकते हैं (लेकिन मुझे लगता है कि आप आधार आईडी के रूप में शून्य का उपयोग कर रहे हैं, इसलिए आपको यह विचार मिल जाएगा)
क्रमबद्ध सॉर्टिंग की कुंजी उस सॉर्ट कुंजी के साथ है जिसे बनाया गया है।
WITH RoleHierarchy (RoleID, [Role], [Description], ParentID, Editable, HierarchyLevel, SortKey) AS
(
-- Base
SELECT
RoleID,
[Role],
[Description],
ParentID,
Editable,
0 as HierarchyLevel,
CAST(RoleID AS VARBINARY(300))
FROM
dbo.Roles
WHERE
RoleID = @ParentID
UNION ALL
-- Recursive
SELECT
e.RoleID,
e.[Role],
e.[Description],
e.ParentID,
e.Editable,
th.HierarchyLevel + 1 AS HierarchyLevel,
CAST (th.SortKey + CAST (e.[Role] AS VARBINARY(100)) + CAST (e.[RoleID] AS VARBINARY(100)) AS VARBINARY(300))
FROM
Roles e
INNER JOIN RoleHierarchy th ON e.ParentID = th.RoleID
WHERE
e.RoleID != 0
)
SELECT
RoleID,
ParentID,
[Role],
[Description],
Editable,
HierarchyLevel
FROM
RoleHierarchy
WHERE
RoleID != @ParentID
ORDER BY
SortKey