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
elsebreak--到达根节点,退出循环
end
select* from @resultTable group by pid --除去重复数据
------储存过程在此截止--------执行
exec GetPidByID 4
数据库结构IDPid1021324251Sqlif exists (select * from sys.procedures where name='GetPidByID') drop procedure GetPidByIDgocreate procedure GetPidByID(@ID int)asdeclar...