- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
SQLServerCTE递归查询全解
在TSQL脚本中,也能实现递归查询,SQL Server提供CTE (Common Table Expression),只需要编写少量的代码,就能实现递归查询,
本⽂详细介绍CTE递归调⽤的特性和使⽤⽰例,递归查询主要⽤于层次结构的查询,从叶级(Leaf Level)向顶层(Root Level)查询,或
从顶层向叶级查询,或递归的路径(Path)。
⼀,递归查询原理
CTE的递归查询必须满⾜三个条件:初始条件,递归调⽤表达式,终⽌条件,CTE 递归查询的伪代码如下:
WITH cte_name ( column_name [,...n] )
AS
(
--Anchor member is defined
CTE_query_definition
UNION ALL
--Recursive member is defined referencing cte_name
CTE_query_definition
)
-- Statement using the CTE
SELECT *
FROM cte_name
1,递归查询⾄少包含两个⼦查询:
第⼀个⼦查询称作定点(Anchor)⼦查询:定点查询只是⼀个返回有效表的查询,⽤于设置递归的初始值;
第⼆个⼦查询称作递归⼦查询:该⼦查询调⽤CTE名称,触发递归查询,实际上是递归⼦查询调⽤递归⼦查询;
两个⼦查询使⽤union all,求并集;
2,CTE的递归终⽌条件
递归查询没有显式的递归终⽌条件,只有当递归⼦查询返回空结果集(没有数据⾏返回)或是超出了递归次数的最⼤限制时,才停⽌递归。
默认的递归查询次数是100,可以使⽤查询提⽰(hint):MAXRECURSION 控制递归的最⼤次数:OPTION( MAXRECURSION 16);如果
允许⽆限制的递归次数,使⽤查询提⽰:option(maxrecursion 0);当递归查询达到指定或默认的 MAXRECURSION 数量限制时,SQL
Server将结束查询并返回错误,如下:
The statement terminated. The maximum recursion 10 has been exhausted before statement completion.
事务执⾏失败,该事务包含的所有操作都被回滚。在产品环境中,慎⽤maxrecursion 查询提⽰,推荐通过 where 条件限制递归的次数。
3,递归步骤
step1 :定点⼦查询设置CTE的初始值,即CTE的初始值Set0 ;
递归调⽤的⼦查询过程:递归⼦查询调⽤递归⼦查询;
step2 :递归⼦查询第⼀次调⽤CTE名称,CTE名称是指CTE的初始值Set0,第⼀次执⾏递归⼦查询之后,CTE名称是指结果集Set1 ;
step3 :递归⼦查询第⼆次调⽤CTE名称,CTE名称是指Set1,第⼆次执⾏递归⼦查询之后,CTE名称是指结果集Set2 ;
step4 :在第N次执⾏递归⼦查询时,CTE名称是指Set(N-1),递归⼦查询都引⽤前⼀个递归⼦查询的结果集;
Step5 :如果递归⼦查询返回空数据⾏,或超出递归次数的最⼤限制,停⽌递归;
⼆,递归查询⽰例(员⼯职称)
1,创建测试数据
ManagerID是UserID的⽗节点,这是⼀个⾮常简单的层次结构模型。
use tempdb
go
create table dbo.dt_user
(
UserID int,
ManagerID int,
Name Nvarchar(10)
)
insert into dbo.dt_user
select 1,-1,NBoss
union all
select 11,1,NA1
union all
select 12,1,NA2
union all
select 13,1,NA3
union all
select 111,11,NB1
union all
select 112,11,NB2
union all
select 121,12,NC1
2,查询每个User的的直接上级Manager
;with cte as
(
select UserID,ManagerID,name,name as ManagerName
from dbo.dt_user
where ManagerI
您可能关注的文档
- 2022年大学生生活职业规划职业规划四篇.pdf
- 2022年天然气站安全员考试题考试注意事项天然气安全员.pdf
- 2022年小课题申报表.pdf
- 2022年继续医学教育项目申报表.pdf
- 2022年药物分析二浙江省自考试题.pdf
- 2022年财务预算申报汇总范表.pdf
- 2022年资源税纳税申报表.pdf
- 2022年车辆购置税纳税申报表.pdf
- 2022教师的批评与自我批评发言稿五篇.pdf
- 2022申报表讲义--辛连珠(1).pdf
- 山西省2025年面向大连理工大学选调优秀高校毕业生笔试备考题库及答案解析.docx
- 2025年郑州航空港经济综合实验区招聘治安巡防队员200名笔试备考试题及答案解析.docx
- 民航事故案例及措施分析.docx
- 2024下半年广东肇庆市端州区教育局招聘中小学教师更正13人笔试备考题库及答案解析.docx
- 2024年早教市场竞争格局及投资战略规划报告.docx
- 2024湖南省体育运动医疗专科医院招聘5人笔试备考题库及答案解析.docx
- 2024年塑料纤维笔行业市场深度分析及发展潜力预测报告.docx
- 2024年孕妇培训行业市场分析预测及市场前景趋势分析报告.docx
- 急诊科相关护理.pptx
- 民航事故案例及措施分析报告.docx
最近下载
- YEWS机组控制系统维修手册.pdf VIP
- 财务总监面试问题.doc VIP
- 2023年电子科技大学计算机科学与技术专业《计算机组成原理》科目期末试卷B(有答案).docx VIP
- 国家开放大学《管理英语4》边学边练Unit 1-4(答案全).docx VIP
- 2023年电子科技大学计算机科学与技术专业《计算机组成原理》科目期末试卷A(有答案).docx VIP
- 2024华医网继续教育加速康复外科理论与实践题库答案.docx VIP
- 河湖水岸硬质护坡的生态化改造.ppt VIP
- 《数字信息资源检索与利用》总复习题.doc VIP
- 支教工作总结报告PPT.pptx
- 25道特斯拉服务与维修工程师岗位常见面试问题含HR常问问题考察点及参考回答.pdf
文档评论(0)