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