Sql Server递归查询实例

本文介绍如何使用CTE(公共表表达式)实现递归查询。通过创建一个父子表结构,并利用递归CTE查询从根节点开始,展示如何显示每一级的数据及其层级关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有时需要完成递归查询,即不断对数据库进行查询,后一个查询条件需要使用前一个查询结构来构建。这时就需要使用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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值