27,579
社区成员
发帖
与我相关
我的任务
分享
declare @t TABLE(ModuleID INT , ModuleName NVARCHAR(10),ParentID int )
INSERT INTO @t
SELECT 10, '系统配置' , 0
UNION ALL SELECT 11, '模块管理' , 10
UNION ALL SELECT 12, '添加模块' , 11
UNION ALL SELECT 14, '模块列表' , 11
UNION ALL SELECT 15, '角色管理' , 10
UNION ALL SELECT 16, '添加角色' , 15
UNION ALL SELECT 17, '角色列表' , 15
UNION ALL SELECT 25, '用户管理' , 0
UNION ALL SELECT 26, '添加用户' , 25
UNION ALL SELECT 27, '用户列表' , 25
UNION ALL SELECT 28, '权限管理', 10
with cte as
(
select *,1 flevel,cast(ModuleName as nvarchar(4000)) fo from @t where ParentID=0
union all
select b.*,a.flevel+1,fo+'\'+b.ModuleName from cte a
join @t b on a.ModuleNameID=b.ParentID
)
select * from cte
order by fo
--CREATE TABLE test (ModuleID INT , ModuleName NVARCHAR(10),ParentID int )
--INSERT INTO test
-- SELECT 10, '系统配置' , 0
--UNION ALL SELECT 11, '模块管理' , 10
--UNION ALL SELECT 12, '添加模块' , 11
--UNION ALL SELECT 14, '模块列表' , 11
--UNION ALL SELECT 15, '角色管理' , 10
--UNION ALL SELECT 16, '添加角色' , 15
--UNION ALL SELECT 17, '角色列表' , 15
--UNION ALL SELECT 25, '用户管理' , 0
--UNION ALL SELECT 26, '添加用户' , 25
--UNION ALL SELECT 27, '用户列表' , 25
--UNION ALL SELECT 28, '权限管理', 10
with t AS (SELECT ROW_NUMBER() OVER(ORDER BY moduleid )id,*
FROM test
WHERE ParentID=0
UNION ALL
SELECT t.id,b.moduleid,b.modulename,b.parentid
FROM t INNER JOIN test b ON t.ModuleID=b.ParentID)
SELECT ModuleID ,ModuleName ,ParentID FROM t
ORDER BY id,moduleid,parentid
/*
ModuleID ModuleName ParentID
----------- ---------- -----------
10 系统配置 0
11 模块管理 10
12 添加模块 11
14 模块列表 11
15 角色管理 10
16 添加角色 15
17 角色列表 15
28 权限管理 10
25 用户管理 0
26 添加用户 25
27 用户列表 25
(11 行受影响)
*/