![SqlServer-无限递归树状图结构设计和查询 SqlServer-无限递归树状图结构设计和查询](https://image.shishitao.com:8440/aHR0cHM6Ly9ia3FzaW1nLmlrYWZhbi5jb20vdXBsb2FkL2NoYXRncHQtcy5wbmc%2FIQ%3D%3D.png?!?w=700&webp=1)
在现实生活中,公司的部门设计会涉及到很多子部门,然后子部门下面又存在子部门,形成类似判断的树状结构,比如说评论楼中楼的评论树状图,职位管理的树状图结构等等,实现类似的树状图数据结构是在开发中经常出现的。
一.数据库关系结构设计
在SqlSever中:我们设计部门表:Department,结构如下:
![SqlServer-无限递归树状图结构设计和查询 SqlServer-无限递归树状图结构设计和查询](https://image.shishitao.com:8440/aHR0cDovL2ltYWdlczIwMTUuY25ibG9ncy5jb20vYmxvZy84MzcwNDIvMjAxNjA5LzgzNzA0Mi0yMDE2MDkwMjExNDcyODI2MS02MjcyMDY4NjQucG5n.png?w=700&webp=1)
添加测试数据如下:
![SqlServer-无限递归树状图结构设计和查询 SqlServer-无限递归树状图结构设计和查询](https://image.shishitao.com:8440/aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTYwNTE5MTgzNjIwNjcy.jpg?w=700&webp=1)
添加存储过程:
ALTER PROCEDURE [dbo].[pSelectDepartment] @Id int AS BEGIN with cte as ( as lvl from Department where Id = @Id union all from cte c inner join Department d on c.Id = d.Pid ) select * from cte END
执行存储过程,现在查询的是Id=1即,总部下面的部门分布情况树状图