在线急求SQLSERVER2008递归查询方案

天晓 2010-07-27 05:54:12
--建表
CREATE TABLE T_COM_MODULE(
MODULE_CODE varchar(40) NOT NULL,
MODULE_NAME varchar(50) NOT NULL,
MODULE_LINK varchar(200) NULL,
PARENT_ID varchar(40) NULL,
PARENT_NAME varchar(50) NULL,
MENU_POSITION decimal(2, 0) DEFAULT 2 NULL,
MODULE_ICON varchar(200) NULL,
SORT_NUMBER decimal(5, 0) NULL,
USED_FLAG decimal(1, 0) DEFAULT 1 NOT NULL,
IS_SYS decimal(1, 0) DEFAULT 0 NULL,
CREATETIME varchar(20) NULL,
UPDATETIME varchar(20) NULL,
REMARK varchar(100) NULL,
CONSTRAINT XPKT_com_Module PRIMARY KEY NONCLUSTERED (MODULE_CODE)
)
go
--插入记录请打开下面超链接
http://www.180000.net/node.txt

--查询结果如下


因有很多表都需要做同样递归查询,希望能有一个公用的函数或存储过程来实现。

...全文
110 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
andy_liucj 2010-07-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 htl258 的回复:]

SQL code
--SELECT * FROM T_COM_MODULE

;WITH t AS
(
SELECT Module_code, lvl = 0,px=CAST(ROW_NUMBER()OVER(ORDER BY SORT_NUMBER) AS VARBINARY)
FROM T_COM_MODULE
WHERE Module_code = 'SYSTE……
[/Quote]改改tony应该就可以了
htl258_Tony 2010-07-27
  • 打赏
  • 举报
回复
--SELECT * FROM T_COM_MODULE

;WITH t AS
(
SELECT Module_code, lvl = 0,px=CAST(ROW_NUMBER()OVER(ORDER BY SORT_NUMBER) AS VARBINARY)
FROM T_COM_MODULE
WHERE Module_code = 'SYSTEM_MANAGE'
UNION ALL
SELECT a.Module_code, lvl+1,CAST(px+CAST(ROW_NUMBER()OVER(PARTITION BY a.Parent_ID ORDER BY SORT_NUMBER) AS VARBINARY) AS VARBINARY)
FROM T_COM_MODULE a, t b
WHERE a.Parent_ID = b.Module_code
)
SELECT lvl,SORT_NUMBER,REPLICATE(SPACE(2),a.lvl)+b.MODULE_Name AS tree
FROM t a
JOIN T_COM_MODULE b
ON a.Module_code=b.Module_code
ORDER BY a.px
/*
lvl SORT_NUMBER tree
----------- --------------------------------------- --------------------------------
0 7 系统管理
1 1 数据字典管理
2 1 机构类型管理
2 2 机构性质管理
2 3 组织类型管理
2 4 组织分类管理
2 5 资产类型
2 6 区域管理
2 7 省份管理
2 8 行政市管理
2 9 区县管理
2 10 职务分类管理
2 11 行业管理
2 12 专业类型管理
2 13 标准功能管理
2 14 工作方式管理
2 15 系统全局参数管理
2 16 自定义属性字段管理
1 2 组织机构管理
2 6 机构管理
2 7 组织管理
2 8 职务管理
2 9 岗位管理
1 3 人员管理
1 4 角色与权限管理
2 1 模块与功能管理
2 2 角色管理
2 3 权限信息查询
1 5 专业管理
1 6 系统消息管理
1 7 通知公告管理

(31 行受影响)
*/
回个树形结构代码
永生天地 2010-07-27
  • 打赏
  • 举报
回复
oracle的?
永生天地 2010-07-27
  • 打赏
  • 举报
回复
看不到图

试试这个一般的递归

with t1 as
(
select convert(varchar(1000),MODULE_CODE) p,* from T_COM_MODULE where PARENT_ID is null
union all
select convert(varchar(1000),b.p+'->'+a.MODULE_CODE),a.* from T_COM_MODULE a ,t1 b where a.PARENT_ID =b.MODULE_CODE
)
select * from t1 order by p
htl258_Tony 2010-07-27
  • 打赏
  • 举报
回复
要什么样的结果呢?

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧