游标与树状结构的遍历
来源:互联网 发布:高仿百度网盘源码 编辑:程序博客网 时间:2024/05/16 10:51
create PROCEDURE [dbo].[User_GetListModule]
-- Add the parameters for the stored procedure here
(
@UserID int
)
AS
BEGIN
--整体思路:1.取得用户可以访问的所有模块ID
--2.将每个模块的所有父级模块ID,插入临时表
--3.去除重复,与模块表连接取出所有模块信息
--声明临时表,将用户可以访问的模块ID全部放入临时表
--最后,用distinct删除重复ID,再与原Sys_Module链接取出相关模块的信息
declare @Modules table
(
ModuleID int
)
--声明游标,遍历ID,取出每个模块的所有上级ID
--将所有上级模块出入临时表
declare moduleCursor cursor for
select distinct(ModuleID) from --获取用户可以访问的模块ID
(
select * from V_User_Position_Function
where EmployeeID=@UserID
union
select * from V_User_Role_Function
where EmployeeID=@UserID
)
as A
--打开游标,提取ID,获取该模块的所有上级模块,并插入临时表
open moduleCursor;
--声明临时变量
declare @Temp_ModuleID int;
--提取第一条数据
fetch next from moduleCursor into @Temp_ModuleID
--循环遍历
while @@fetch_status=0
begin
--将该模块的所有父级模块ID,出入临时表
--临时表中的数据可能重复
insert into @Modules(ModuleID)
select ModuleID from Get_ParentModules(@Temp_ModuleID);
--提取下一条数据,以便开始循环
fetch next from moduleCursor into @Temp_ModuleID
end
--从临时表中去除重复,取出模块信息
select * from Sys_Module where ModuleID in
(
select distinct(ModuleID) from @Modules--去除临时表中的重复ID
)
END
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//取出指定模块的所有上级模块
create function [dbo].[Get_ParentModules]
(
@ModuleID int
)
returns @ParentModules table
(
ModuleID int not null,
level int not null
)
as
begin
--如果不存在指定模块,则直接返回
if not exists (select * from Sys_Module where ModuleID=@ModuleID)
return;
declare @Level int;
set @Level=0;
while @ModuleID is not null
begin
--把当前模块插入临时表
insert into @ParentModules(ModuleID,Level) values(@ModuleID,@Level)
--递增级别计数器
set @Level=@Level+1;
set @ModuleID=(select ParentID from Sys_Module where ModuleID=@ModuleID)
end
return;
end
--select * from [Get_ParentModules](2)
- 游标与树状结构的遍历
- 树状结构对象的获取及遍历
- 框架与树状结构菜单的结合
- Hibernate基础之十一:树状结构遍历
- 树状结构的设计
- 树状结构的实现
- 图的存储结构与遍历
- 结构数组的初始化与遍历
- 关于二叉树的结构与遍历
- --树状结构存储与展示
- Oracle数据库 树状结构的存储与展现
- 深层次树状结构遍历的改进 查找硬盘中的 “java.exe”
- 关于树状 结构 遍历根节点的所有子节点---验证可用
- 使用java的File类遍历文件夹,打印树状结构(递归实现)
- Xml树状节点的遍历
- 不用游标 遍历记录的sql语句
- 使用WHILE和游标的遍历操作
- 遍历游标的几种方式
- iPhone -- server交互数据格式
- VS2008 VSS2005 "获取最新版本"的tips
- D3D初始化方法
- 用三字经解读电脑固件
- 中导出数据到WORD中
- 游标与树状结构的遍历
- Enterprise Architect 7.0入门教程
- winrar rarreg.key
- document.body.scrollTop总是零的原因
- 字符串操作函数
- 结婚纪念日
- GridView中按指定时间更新数据
- 无名管道的用法
- 老生常谈之--修内功还是打把势