以前使用的是2000 读那种菜单子菜单数据 都要自己写个存储过程来递归
2005后就支持CTE查询了 方便不少 而且很容易明白
![ContractedBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
with dt(c_name,pkid,c_parent)
as
(
select c_name,pkid,c_parent from CategorySelf where pkid = 2 --这是查第一级菜单的条件
union all
select p.c_name,p.pkid,p.c_parent from CategorySelf p inner join
dt on p.c_parent = dt.pkid
)
select * from dt where pkid != 2
as
(
select c_name,pkid,c_parent from CategorySelf where pkid = 2 --这是查第一级菜单的条件
union all
select p.c_name,p.pkid,p.c_parent from CategorySelf p inner join
dt on p.c_parent = dt.pkid
)
select * from dt where pkid != 2