SQL WITH 递归查询

 

 

  如果表时存放的是树状的数据(如权限、系统模块等)面我们需要根据其中的一条记录查询出它的所有子集记录的话,这篇文章就是最好的解决办法。

  直接例子:下面是我的表

  表中存放的是后台系统的功能模块信息,ModuleID表示模块的编号、MoudleName表示模块名、ModuleFather表示模块的父级编号(如果为0则表示自己是最高级的)。

  现在我们要查询出OA管理的所有子模块(不限级)。

  由SQL语句如下。

   查询结果为:

 

 

       上面说了不限级,其实SQL还是有限制的,默认好像是1000级,但我们有时候想看下这些数据能否执行多少级,我们就可以在上面查询的结尾处加上:OPTION(MAXRECURSION  级数)

       如果我们在写SQL的时候要求只返回前M级的数据,那么我们可以在上面的查询结果中加一个级数,每递归一次级数加1 ,最后在条件里加上级数限制,代码如下:

 

view source print ?
01. WITH Modules(ModuleId,ModuleName,ModuleFather,ModuleSort,Lev)
02. AS
03. (
04. SELECT ModuleId,ModuleName,ModuleFather,ModuleSort,0
05. FROM dbo.Module
06. WHERE ModuleId=1
07. UNION ALL
08. SELECT m.ModuleId,m.ModuleName,m.ModuleFather,m.ModuleSort,Lev+1
09. FROM dbo.Module m
10. INNER JOIN Modules a
11. ON a.ModuleId=m.ModuleFather
12. )
13.  
14. SELECT m.ModuleId,m.ModuleName,m.ModuleFather,m.ModuleSort
15. FROM Modules m
16. INNER JOIN dbo.Module mod
17. ON m.ModuleFather=mod.ModuleId
18. --级数限制
19. WHERE Lev<3

 

 

你可能感兴趣的:(SQL WITH 递归查询)