树形结构数据显示函数
测试表:fmenu
字段menuid int ,menuname varchar(50),parentmenu int
分别为 菜单编号 ,名称,上级编号
数据:
1 系统 0
2 管理系统 1
3 财务 2
4 分销 2
5 组织 1
6 公司 5
实现显示结构有:
系统
管理系统
财务
分销
组织
公司
即数据结构!
------解决方案--------------------邹老大的代码
--测试数据
DECLARE @t TABLE(ID char(3),PID char(3),Name nvarchar(10))
INSERT @t SELECT '001 ',NULL , '山东省 '
UNION ALL SELECT '002 ', '001 ', '烟台市 '
UNION ALL SELECT '004 ', '002 ', '招远市 '
UNION ALL SELECT '003 ', '001 ', '青岛市 '
UNION ALL SELECT '005 ',NULL , '四会市 '
UNION ALL SELECT '006 ', '005 ', '清远市 '
UNION ALL SELECT '007 ', '006 ', '小分市 '
--深度排序显示处理
--生成每个节点的编码累计(相同当单编号法的编码)
DECLARE @t_Level TABLE(ID char(3),Level int,Sort varchar(8000))
DECLARE @Level int
SET @Level=0
INSERT @t_Level SELECT ID,@Level,ID
FROM @t
WHERE PID IS NULL
WHILE @@ROWCOUNT> 0
BEGIN
SET @Level=@Level+1
INSERT @t_Level SELECT a.ID,@Level,b.Sort+a.ID
FROM @t a,@t_Level b
WHERE a.PID=b.ID
AND b.Level=@Level-1
END
--显示结果
SELECT SPACE(b.Level*2)+ '|-- '+a.Name
FROM @t a,@t_Level b
WHERE a.ID=b.ID
ORDER BY b.Sort
/*--结果
|--山东省
|--烟台市
|--招远市
|--青岛市
|--四会市
|--清远市
|--小分市
--*/
------解决方案----------------------测试数据
DECLARE @t TABLE(ID char(3),PID char(3),Name nvarchar(10))
insert @t
select 1,0 , '系统 ' union all
select 2,1 , '管理系统 ' union all
select 3,2 , '财务 ' union all
select 4,2 , '分销 ' union all
select 5,1 , '组织 ' union all
select 6,5 , '公司 ' union all
select 7,3 , '分销 ' union all
select 8,3 , '组织 ' union all
select 9,4 , '公司 '
--深度排序显示处理
--生成每个节点的编码累计(相同当单编号法的编码)
DECLARE @t_Level TABLE(ID char(3),Level int,Sort varchar(8000))
DECLARE @Level int
SET @Level=0
INSERT @t_Level SELECT ID,@Level,ID
FROM @t
WHERE PID =0
WHILE @@ROWCOUNT> 0
BEGIN
SET @Level=@Level+1
INSERT @t_Level SELECT a.ID,@Level,b.Sort+a.ID
FROM @t a,@t_Level b
WHERE a.PID=b.ID
AND b.Level=@Level-1
END
--显示结果
SELECT SPACE(b.Level*6)+ '|-- '+a.Name
FROM @t a,@t_Level b
WHERE a.ID=b.ID
ORDER BY b.Sort
------解决方案--------------------DECLARE @t TABLE(ID char(3),PID char(3),Name nvarchar(10))
insert @t
select 1,0