if exists (select * from sys.objects where name='func_all_related_levels')
drop function func_all_related_levels
go
create function func_all_related_levels (
@id int
)
returns @result table (
id int
)
as
begin
------第一次插入数据。
declare @total int;
select @total = count(*) from TestTable where PId = @id
if @total = 0
return;
insert @result
select Id from TestTable where PId = @id;
------遍历,可用。
declare @cursor int = 0;
while @cursor < @total
begin
declare @nextId int;
select @nextId = id from @result order by id offset (@cursor) rows fetch next 1 rows only;
insert @result
select id from dbo.func_all_related_levels(@nextId);
set @cursor = @cursor + 1;
end
------游标,出现多余数据。
--declare c cursor for select id from @result;
--open c;
--while @@FETCH_STATUS = 0
-- begin
-- declare @nextId int;
-- fetch next from c into @nextId;
-- insert @result
-- select id from dbo.func_all_related_levels(@nextId);
-- end
--close c;
--deallocate c;
return;
end