网站建设资讯

NEWS

网站建设资讯

sqlserver递归树,sql向上递归

C#递归建树方法

不知道你是不是访问数据库,我最近也再写个项目,需要递归一个节点下面的所有子节点,我自己写了两个存储过程!注意是嵌套的,我的表结构为id,title,parent,如下:

成都创新互联长期为数千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为梅河口企业提供专业的成都网站设计、做网站,梅河口网站改版等技术服务。拥有十余年丰富建站经验和众多成功案例,为您定制开发。

CREATE proc getChildTNode

@selectid int --这里是传入一个你选择的节点id

as

declare @id int--声明了一个游标变量id

insert #temp select * from tree where parent=@selectid --先插入parent字段为选择id的所有子节点

declare MyCursor cursor local for select [id] from tree where parent=@selectid--声明游标

open MyCursor--打开游标

fetch next from MyCursor into @id--读取下一行

while(@@fetch_status = 0)--判断,至于为什么要判断=0,就不用追究了

begin

exec getChildTNode @id --递归调用

fetch next from MyCursor into @id --将下一个节点id放进id变量作为父节点遍历

end

close MyCursor--关闭游标

deallocate MyCursor--什邡游标

这里还没有完,还有以下调用上面这个存储过程

CREATE proc getChildTNodes

@select int--同上面的定义一个父节点变量

as

create table #temp(

[id] int,

title varchar(50),

parent int,

)--建立一个临时表

exec getChildTNode @select--执行上面定义的存储过程,并传入父节点参数

select * from #temp--递归完成后,选择所有子节点数据

我用的是sqlserver数据库,如果你不是数据库的话,再来探索下,我只是做了存储过程,我相信C#代码还是和这个类似吧!希望对你有帮助

sqlserver 递归查询

CREATE TABLE #tb1(stuId INT,stuName VARCHAR(30),teaId INT);

INSERT INTO #tb1 (stuId,stuName,teaId)

VALUES(1,'zhou',0),(2,'kong',0),(3,'hong',2),(4,'zhang',1),(5,'liu',4),

(6,'zhao',5),(7,'zheng',6),(8,'wei',7)

;WITH cte AS (

SELECT t.stuId,t.stuName,t.teaId FROM #tb1 AS t

WHERE t.stuId=8

UNION ALL

SELECT t.stuId,t.stuName,t.teaId FROM cte AS c

JOIN #tb1 AS t ON c.teaId=t.stuId

)

SELECT * FROM cte

sqlserver查询树形结构的所有子节点

用标准sql的with实现递归查询(sql2005以上肯定支持,sql2000不清楚是否支持):

with subqry(id,name,pid) as (

select id,name,pid from test1 where id = 5

union all

select test1.id,test1.name,test1.pid from test1,subqry

where test1.pid = subqry.id

)

select * from subqry;

关于sqlserver递归查询

你的意思没特别看懂,但是在ORACLE里面的递归语法是:

select * from tab ...start with ... connect by col_parent...

你可以查一下start with ,connect 的语法


分享文章:sqlserver递归树,sql向上递归
当前链接:http://njwzjz.com/article/dssjicd.html