博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
递归查询上一级
阅读量:6451 次
发布时间:2019-06-23

本文共 1273 字,大约阅读时间需要 4 分钟。

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[test]') AND type in (N'U'))

DROP TABLE [dbo].[test]
GO

CREATE TABLE [dbo].[test](

[id] [int] NULL,
[name] [nvarchar](50) NULL,
[upid] [int] NULL
) ON [PRIMARY]

GO

insert into test select 1,'A',0

insert into test select 2,'B',1
insert into test select 3,'C',2
insert into test select 4,'D',1
insert into test select 5,'E',4
insert into test select 6,'F',3
insert into test select 7,'G',5
insert into test select 8,'H',6

--创建用户定义函数,每个子节点de父节点的信息

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[f_getParent]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
DROP FUNCTION [dbo].[f_getParent]
GO

create function f_getParent(@ID int)

returns varchar(40)
as
begin
declare @ret varchar(40)
declare @str nvarchar(100)
while exists(select 1 from test where ID=@ID and upid<>0 and upid<>1)
begin
select @ID=b.ID--,@ret=','+rtrim(b.ID)+isnull(@ret,'')
,@ret=','+rtrim(b.name)+isnull(@ret,'')
from
test a,test b
where
a.ID=@ID and b.ID=a.upid
end
set @ret=stuff(@ret,1,1,'')
return @ret
end
go
--执行查询
select ID,isnull(dbo.f_getParent(ID),'') as parentID from test
go

 

查询结果:

ID parentID

1
2
3     B
4
5     D
6     B,C
7     D,E
8     B,C,F

转载于:https://www.cnblogs.com/leesa/archive/2012/12/13/2816561.html

你可能感兴趣的文章
DynamoDB Local for Desktop Development
查看>>
ANDROID的SENSOR相关信息
查看>>
laravel 使用QQ邮箱发送邮件
查看>>
用javascript验证哥德巴赫猜想
查看>>
Shell编程-环境变量配置文件
查看>>
thymeleaf 中文乱码问题
查看>>
(转)CSS浮动(float,clear)通俗讲解
查看>>
os.walk函数
查看>>
[Unity3d]DrawCall优化手记
查看>>
细数.NET 中那些ORM框架 —— 谈谈这些天的收获之一
查看>>
SQL Serever学习7——数据表2
查看>>
洛谷——P2404 自然数的拆分问题
查看>>
(转)Mac 下设置android NDK的环境
查看>>
[struts]s:action 的使用方法
查看>>
dubbo问题总结
查看>>
20165320 第三周学习总结
查看>>
Struts2和Spring MVC的区别
查看>>
angular-bootstrap ui-date组件问题总结
查看>>
理解Javascript参数中的arguments对象
查看>>
p2:千行代码入门python
查看>>