Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर ट्री पदानुक्रम और डुप्लिकेट रिकॉर्ड आईडी के साथ नेस्टेड सेट

यहाँ एक है जो मेरे लिए ट्रिक करता है:

@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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर तालिका से INSERT कथन उत्पन्न करें

  2. SQL सर्वर बैकअप DB फ़ाइलों से इतना बड़ा क्यों है?

  3. परपेचुअल वेटेड एवरेज कॉस्ट कैलकुलेशन SQL Server 2008

  4. टीएसक्यूएल डेटडिफ 2 दशमलव स्थानों के साथ दिनों की संख्या वापस करने के लिए

  5. ट्री संरचनाओं के लिए अनुकूलित SQL