表结构如下:
TreeId    TreeName    TreeUp    TreeLevel    IsNode    ResId
1157500 销售退货差异查询 1150000 2 1 K1360
1251000 VIP档案维护 1250000 2 1 D0010
1254500 VIP资料查询 1250000 2 1 K1810
1255000 VIP累计消费情况 1250000 2 1 K1820
然后导航菜单是根据这个表来生成的。
主要根据TreeId和TreeUp这个关系来生成menu。
这个该怎么生成呢。
难道要一次查询一次一级菜单,然后来此遍历一级菜单,才回到数据库查找二级菜单,以此类推?那得连好几次数据库。第二个问题是:
resid是控制权限的。就是有些用户有这个resid权限,这个节点就显示,否则就不显示。
问题在于路径,如果一个用户具有三级菜单的某个权限。但是显示menu时必须显示一级,二级,才能找到三级的权限。
就是必须往回追溯到顶级菜单。这个又该如何处理呢。

解决方案 »

  1.   

    这里有一个递归的列子:
    create table ta (项目 varchar(20),上级项目 varchar(20),num int)
    insert ta
    select 'A','' ,100 union all
    select 'B','A' ,200 union all
    select 'C','B' ,300 union all
    select 'D','B' ,400 union all
    select 'E','C' ,500 union all
    select 'F','D' ,600 union all
    select 'H','E' ,700 union all
    select 'G','F' ,800 如果要显示上级的项目:create function roy_f(@项目 varchar(20))
    returns varchar(100)
    as
    begindeclare @上级项目 varchar(20)select @上级项目=上级项目 from ta where 项目=@项目return case when @上级项目 is null then null             else  isnull(dbo.roy_f(@上级项目)+'-','')+@项目 end
    end
    go
    select 项目,关系=dbo.roy_f(项目) from ta
      

  2.   

    用CTE(Common Table Expressions)轻松搞掂!