sql >> データベース >  >> RDS >> Sqlserver

重複するレコード ID を持つ SQL Server ツリー階層とネストされたセット

    これは私のためにトリックを行うものです:

    @ParentID は階層の開始点にすぎませんが、0 を渡すことができます (ただし、ベース ID として null を使用していると思われるので、おわかりいただけると思います)

    順序付けされた並べ替えの鍵は、構築された並べ替えキーにあります。

    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. SalesforceおよびOktaシングルサインオン(SSO)でのODBCの使用

    2. 組み込みのMySQLユーザーとWebサイトのアクセス許可を使用してみませんか?

    3. SQLサーバーは日時を別のタイムゾーンに変換しますか?

    4. MySQLワークベンチ:mysqlデータベースを.sqlファイルにエクスポートする方法は?