sql >> Database >  >> RDS >> Sqlserver

SQL Server-structuurhiërarchie en geneste sets met dubbele record-id's

Hier is er een die het voor mij doet:

@ParentID is slechts een beginpunt in de hiërarchie, maar je kunt 0 doorgeven (maar ik denk dat je null gebruikt als de basis-ID, dus je snapt het idee)

De sleutel tot geordend sorteren is met de sorteersleutel die is opgebouwd.

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


  1. Het actieve resultaat bevat geen velden die PDO gebruiken met MS SQL

  2. Hoe een vastgelegde groep te vervangen door een geëvalueerde uitdrukking (een geheel getal toevoegen aan de vast te leggen groep)

  3. Inzicht in 'datetime2' opslaggrootte in SQL Server

  4. Kan %NOTFOUND null retourneren na een fetch?