如何用视图或者函数实现类似循环的功能

dj0109 2005-08-18 09:07:49
我有这样的一个问题:在一个表里面我有很多单位,单位有上级单位,可能上级单位还有上级单位,单位层次部确定,在每个单位里面有一个字段par_id是保存其上级单位的,现在我怎么样能够将其中的一部分(或者某一个)单位的所有上级全部取出来?望高手赐教
...全文
147 点赞 收藏 3
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
welch2008 2005-08-22
这本质上是一个递规问题,可以参考递规的写法写一个递规函数
回复
子陌红尘 2005-08-18
--生成测试数据
create table BOM(Par_ID INT,ID INT)
insert into BOM select null,1
insert into BOM select 1,2
insert into BOM select 2,3
insert into BOM select 3,4
insert into BOM select 4,5
insert into BOM select 5,6
insert into BOM select 6,7
go

--创建用户定义函数
create function f_getparent(@ID INT)
returns @t table(ID INT,Level INT)
as
begin
declare @i int
set @i = 0
insert into @t select @ID,@i

while @@rowcount<>0
begin
set @i = @i + 1

insert into
@t
select
a.Par_ID,@i
from
BOM a,@t b
where
a.ID=b.ID
and
b.Level = @i-1
and
a.Par_ID is not null
end

return
end
go

--执行查询
select ID from dbo.f_getparent(5) order by Level desc
go
回复
子陌红尘 2005-08-18
--生成测试数据
create table BOM(Par_ID INT,ID INT)
insert into BOM select null,1
insert into BOM select 1,2
insert into BOM select 2,3
insert into BOM select 3,4
insert into BOM select 4,5
insert into BOM select 5,6
insert into BOM select 6,7
go

--创建用户定义函数
create function f_getparent(@ID INT)
returns @t table(ID INT,Level INT)
as
begin
declare @i int
set @i = 0
insert into @t select @ID,@i

while @@rowcount<>0
begin
set @i = @i + 1

insert into
@t
select
a.Par_ID,@i
from
BOM a,@t b
where
a.ID=b.ID
and
b.Level = @i-1
and
a.Par_ID is not null
end

return
end
go

--执行查询
select ID from dbo.f_getparent(5) order by Level desc
go
回复
相关推荐
发帖
应用实例
创建于2007-09-28

2.7w+

社区成员

MS-SQL Server 应用实例
申请成为版主
帖子事件
创建了帖子
2005-08-18 09:07
社区公告
暂无公告