Sql Server递归查询实例

原创 2017年01月02日 21:20:51

有时需要完成递归查询,即不断对数据库进行查询,后一个查询条件需要使用前一个查询结构来构建。这时就需要使用CTE来完成。


1. 创建测试表:



CREATE TABLE NameList(
	[Id] [int] NOT NULL,
	[ParentId] [int] NOT NULL,
	[Name] [nvarchar](20) NULL
) ON [PRIMARY]






说明:
为演示递归查询,需要创建一个父子表。
id: 主键
parentId : 父id
name: 名称


查询:从根节点(没有父节点)出发,显示出每行的层数。
由于这个查询使用前一个查询结果来构造查询语句,因此需要使用CTE来完成递归查询。
declare @id int
set @id=1;
with CTE as (
select id,name, parentid, 0 as Level
from namelist
where ParentId=@id
UNION ALL
-- Recursive 
select n.id,n.name, n.parentid, Level+1 as Level
from namelist n
join CTE on n.ParentId=cte.id
)
select * from CTE
option(MAXRECURSION 500)




上例的递归层数设为500
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

sql 实现递归算法

最近一段上csdn的时间比较多,浏览了不少sql server 版面的帖子,发现根据传入参数查找指定项的子项的递归用法提问的比较多,所以在这里总结一下:样表:child,parent1      02...

Sql语句里的递归查询

Sql语句里的递归查询 SqlServer2005和Oracle 两个版本   以前使用Oracle,觉得它的递归查询很好用,就研究了一下SqlServer,发现它...
  • pdn2000
  • pdn2000
  • 2011年08月09日 23:42
  • 39199

SQLServer 递归查询

--SQLServer 递归查询,主要用于建立树形结构 IF OBJECT_ID('Categories') IS NOT NULL DROP TABLE Categories GO CR...

SQL Server CTE 递归查询全解

最近工作中遇到了一个问题,需要根据保存的流程数据,构建流程图。数据库中保持的流程数据是树形结构的,表结构及数据如下图: 仔细观察表结构,会发现其树形结构的特点: FFIRSTNODE:标记是否...
  • 3150379
  • 3150379
  • 2017年02月04日 20:09
  • 1338

SQLserver2008使用表达式递归查询语句

--由父项递归下级  with cte(id,parentid,text)  as  (--父项  select id,parentid,text from treeview where pa...
  • wem520
  • wem520
  • 2014年10月08日 10:29
  • 1679

Sql递归(用with 实现递归查询)

用with代码段实现递归查询,效率高
  • lqh4188
  • lqh4188
  • 2016年07月19日 14:17
  • 11387

SQL SERVER 进行递归查询

有如下数据表     假如我们要查询ID为003的数据的所有子节点我们可以使用CTE 递归查询完成...   if OBJECT_ID('tb','N') is not null d...
  • myxx520
  • myxx520
  • 2011年10月31日 20:31
  • 19377

Java递归调用测试小demo

递归简单点说就是方法调用自己本身。直到满足某一条件退出方法。 下来结合一个小例子来说明其用途package feilong.day1221; import java.util.Scanner; /**...

SQL Server 2005中的CTE递归查询得到一棵树

感觉这个CTE递归查询蛮好用的,先举个例子:   [c-sharp] view plain copy  print? use City;   go  ...

【SQL Server】递归CTE查询view/sp/fun中使用的所有表

递归CTE查询SQL Server具有依赖关系的实体对象
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Sql Server递归查询实例
举报原因:
原因补充:

(最多只允许输入30个字)