Sql Server获取指定ID的所有父节点ID
程序员文章站
2022-06-01 22:41:17
...
数据库结构
ID | Pid |
---|---|
1 | 0 |
2 | 1 |
3 | 2 |
4 | 2 |
5 | 1 |
Sql
if exists (select * from sys.procedures where name='GetPidByID')
drop procedure GetPidByID
go
create procedure GetPidByID
(
@ID int
)
as
declare @resultTable table(Pid int)--结果表
declare @selectTable table(ID int)--每一次查询结果表
declare @whereTable table(ID int)--上一次条件查询表
insert @whereTable values(@ID)--添加查询条件
while 1=1 --进入循环,不由它控制循环结束
begin
insert into @selectTable
select t.Pid from [表名] t join @whereTable r on t.ID=r.ID group by t.pid --按上一次条件查询表进行查询pid
if not exists(select * from @selectTable where ID = 0) and exists(select * from @selectTable) --判断是否查到根节点pid=0,或者无数据
begin
--没有到根节点
insert into @resultTable select * from @selectTable --将本次查询结果添加到结果表中
delete @whereTable --删除上一次条件查询表中的数据
insert into @whereTable select * from @selectTable --将本次查询结果添加到上一次条件查询表中,以便下次查询
end
else
break--到达根节点,退出循环
end
select * from @resultTable group by pid --除去重复数据
------储存过程在此截止------
--执行
exec GetPidByID 4
上一篇: 关于数据库的知识点和性能优化的总结
下一篇: SQL Server 笔记