SQL递归函数列出父级的所有子级
2009-09-18 14:07
429 查看
--SQL递归函数列出父级的所有子级(ID ParentID模式)
--生成测试数据
create table Dept(ID int,ParentID int,msg varchar(20))
insert into Dept select 1,0,null
insert into Dept select 2,1,null
insert into Dept select 3,1,null
insert into Dept select 4,2,null
insert into Dept select 5,3,null
insert into Dept select 6,5,null
insert into Dept select 7,6,null
go
--调用方法:
--select * from GetChild('24')
--select id from GetChild('24')
--select * from KuCun where ProductType in(select id from GetChild('24'))
Create function [dbo].[GetChild](@ID varchar(10))
returns @t table(ID varchar(10),ParentID varchar(10),Level int)
as
begin
declare @i int
set @i = 1
insert into @t select @ID,@ID,0 --当前级,本级,如果不要的话可以注释掉或再加个参数来选择操作
insert into @t select ID,ParentID,@i from sys_org_info where ParentID = @ID
while @@rowcount<>0
begin
set @i = @i + 1
insert into @t
select
a.ID,a.ParentID,@i
from
sys_org_info a,@t b
where
a.ParentID=b.ID and b.Level = @i-1
end
return
end
--执行查询
select ID from dbo.GetChild(3)
go
--在SQL Server2005中其实提供了CTE[公共表表达式]来实现递归:
Declare @Id Int
Set @Id = 24; ---在此修改父节点
With RootNodeCTE(Id,ParentId)
As
(
Select Id,ParentId From Dept Where ParentId In (@Id)
Union All
Select Dept.Id,Dept.ParentId From RootNodeCTE
Inner Join Dept
On RootNodeCTE.Id = Dept.ParentId
)
Select * From RootNodeCTE
--生成测试数据
create table Dept(ID int,ParentID int,msg varchar(20))
insert into Dept select 1,0,null
insert into Dept select 2,1,null
insert into Dept select 3,1,null
insert into Dept select 4,2,null
insert into Dept select 5,3,null
insert into Dept select 6,5,null
insert into Dept select 7,6,null
go
--调用方法:
--select * from GetChild('24')
--select id from GetChild('24')
--select * from KuCun where ProductType in(select id from GetChild('24'))
Create function [dbo].[GetChild](@ID varchar(10))
returns @t table(ID varchar(10),ParentID varchar(10),Level int)
as
begin
declare @i int
set @i = 1
insert into @t select @ID,@ID,0 --当前级,本级,如果不要的话可以注释掉或再加个参数来选择操作
insert into @t select ID,ParentID,@i from sys_org_info where ParentID = @ID
while @@rowcount<>0
begin
set @i = @i + 1
insert into @t
select
a.ID,a.ParentID,@i
from
sys_org_info a,@t b
where
a.ParentID=b.ID and b.Level = @i-1
end
return
end
--执行查询
select ID from dbo.GetChild(3)
go
--在SQL Server2005中其实提供了CTE[公共表表达式]来实现递归:
Declare @Id Int
Set @Id = 24; ---在此修改父节点
With RootNodeCTE(Id,ParentId)
As
(
Select Id,ParentId From Dept Where ParentId In (@Id)
Union All
Select Dept.Id,Dept.ParentId From RootNodeCTE
Inner Join Dept
On RootNodeCTE.Id = Dept.ParentId
)
Select * From RootNodeCTE
相关文章推荐
- SQL递归函数列出父级的所有子级(ID ParentID模式)
- SQL递归函数列出父级的所有子级(ID ParentID模式)
- SQL递归函数列出父级的所有子级(ID ParentID模式)
- SQL递归函数列出父级的所有子级(ID ParentID模式)
- SQL递归函数列出父级的所有子级(ID ParentID模式)
- mybatis根据父级编号获取所有的子级
- 无限极分类mysql存储过程编写实现调用时给定一个id,返回其所有父级与子级并排序
- 根据id查询出所有的父级和子级
- msql 递归查询所有父级 和子级信息
- sql 递归函数,根据父级ID获取所有子级(含自己)
- jquery父级元素获取所有子级元素
- mysql sql 根据父级id查询书所有的子孙级数据,或根据子级id查询对应的父级
- 无限级分类查找节点的所有子级和父级 (转载)
- 传递一个父id返回所有子id的用法,可用于删除父级以下的所有子级
- jQuery处理点击父级checkbox所有子级checkbox都选中,取消选中所有子级checkbox都取消
- Mysql 根据id查所有父级或子级
- 无限级分类查找节点的所有子级和父级
- mysql 如何根据父级字段得到所有子级
- MSSQL 下递归CTE的应用通过父级获取所有对应的子级节点(一)
- mysql中使用递归实现父级部门所有子级信息的查询