很多人可能想要查询整个树形表关联的内容都会通过循环递归来查...事实上在微软在SQL2005或以上版本就能用别的语法进行查询,下面是示例。--通过子节点查询父节点WITHTREEAS(SELECT*FROMAreasWHEREid=6--要查询的子idUNIONALLSELECTAreas.*FROMAreas,TREEWHERETREE.PId=Areas.Id)SELECTAreaFROMTREE--通过父节点查询子节点WITHTREEAS(SELECT*FROMAreasWHEREid=7--要查询的子idUNIONALLSELECTAreas.*FROMAreas,TREEWHERETREE.Id=Areas.PId)SELECTAreaFROMTREE通过子节点查询父节点查询结果为:修改代码为--通过子节点查询父节点declare@areavarchar(8000);WITHTREEAS(SELECT*FROMAreasWHEREid=6--要查询的子idUNIONALLSELECTAreas.*FROMAreas,TREEWHERETREE.PId=Areas.Id)sel
很多人可能想要查询整个树形表关联的内容都会通过循环递归来查...事实上在微软在SQL2005或以上版本就能用别的语法进行查询,下面是示例。
--通过子节点查询父节点WITH TREE AS( SELECT * FROM Areas WHERE id = 6 -- 要查询的子 id UNION ALL SELECT Areas.* FROM Areas, TREE WHERE TREE.PId = Areas.Id) SELECT Area FROM TREE--通过父节点查询子节点WITH TREE AS( SELECT * FROM Areas WHERE id = 7 -- 要查询的子 id UNION ALL SELECT Areas.* FROM Areas, TREE WHERE TREE.Id = Areas.PId) SELECT Area FROM TREE
通过子节点查询父节点查询结果为:
修改代码为
--通过子节点查询父节点declare @area varchar(8000);WITH TREE AS( SELECT * FROM Areas WHERE id = 6 -- 要查询的子 id UNION ALL SELECT Areas.* FROM Areas, TREE WHERE TREE.PId = Areas.Id)select @area=isnull(@area,'')+Area from Tree order by id select Area= @area
则结果为:中国北京市丰台区
根据以上可以将这段代码封装为一个存储过程
-----存储过程,递归获取树形地区表字符串if exists (select * from sysobjects where name='SP_GetAreaStr')drop proc SP_GetAreaStrgocreate procedure SP_GetAreaStr @id intasdeclare @area varchar(8000)beginWITH TREE AS( SELECT * FROM Areas WHERE id = @id -- 要查询的子 id UNION ALL SELECT Areas.* FROM Areas, TREE WHERE TREE.PId = Areas.Id)select @area=isnull(@area,'')+Area from Tree order by id select Area= @areaend go--exec sp_helptext 'SP_GetAreaStr'--goexec SP_GetAreaStr 28go
查询结果:中国安徽省宿州市灵璧县
所用表结构:
部分数据:
以上所述是小编给大家介绍的SQL Server 树形表非循环递归查询的实例详解的相关知识,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
标签: SQLServer 树形 表非 循环 递归 查询 实例 详解
声明:本文内容来源自网络,文字、图片等素材版权属于原作者,平台转载素材出于传递更多信息,文章内容仅供参考与学习,切勿作为商业目的使用。如果侵害了您的合法权益,请您及时与我们联系,我们会在第一时间进行处理!我们尊重版权,也致力于保护版权,站搜网感谢您的分享!