time 
设为首页】【收藏本站
当前位置: 主页 > 数据库 > SQL Server > SQL T-SQL > T-SQL中用队列实现遍历层级数据示例

T-SQL中用队列实现遍历层级数据示例

时间:2013-05-20 00:18 点击:1512次 字体:[ ]




前几天看了《The Guru's Guide To Transact SQL》(中文翻译是Transact-SQL 权威指南),里面介绍的一个查询是关于层级结构的,处理的方式本质就是队列,遍历的结果就像遍历二叉树的中先序遍历,很有趣。

待查询的表结构如下:

T-SQL中用队列实现遍历层级数据示例_www.fengfly.com

每个层节点都分配一个唯一的ID、节点的名称、上一个父节点的ID。现在,要做的是查找指定节点ID下所有的子节点,比如对于ID为3的节点来说,它的查询结果ID 集为{5,6,7,8,9,10,11,12,13}。下面就是关键了,写了个存储过程,方便重用。

T-SQL中用队列实现遍历层级数据示例_www.fengfly.com

简单介绍下它的原理,首先,将自身加载到队列中,初始化队列。每次都从队列中弹出一个值,并把值写入到结果集中,再把属于值的子节点塞到队列中。如果成功塞入,就进入下一个层级,很类似于遍历树形结构使用队列处理的情况。在处理队列时,如果发现当前层以没有元素需要处理了,则返回处理它的上一层,就是语句IF EXISTS(SELECT * FROM #queue where lvl=@lvl) BEGIN。。。END ELSE SET @lvl = @lvl-1,也是退出WHILE循环的条件。

下面看看执行的结果:

T-SQL中用队列实现遍历层级数据示例_www.fengfly.com

总结一下,TSQL是相当灵活的,很多数据结构中的算法都可以结合表来实现,最后实现的语句虽然复杂了点,不过效率一般较高。发帖辛苦,请支持下。

demo的sql语句:TSQLQueue.zip



本文地址 : http://www.fengfly.com/plus/view-212731-1.html
标签: T-SQL
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码: