这里有新鲜出炉的SQL Server教程,程序狗速度看过来!
SQL是英文Structured Query Language的缩写,意思为结构化查询语言。SQL语言的主要功能就是同各种数据库建立联系,进行沟通。按照ANSI(美国国家标准协会)的规定,SQL被作为关系型数据库管理系统的标准语言。
SQL Server 即 Microsoft SQL Server 。
这篇文章主要介绍了SQL Server 树形表非循环递归查询的实例详解的相关资料,本文介绍的非常详细具有参考借鉴价值,需要的朋友可以参考下
很多人可能想要查询整个树形表关联的内容都会通过循环递归来查...事实上在微软在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_GetAreaStr
- go
- create procedure SP_GetAreaStr
- @id int
- as
- declare @area varchar(8000)
- begin
- WITH
- 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= @area
- end
- go
- --exec sp_helptext 'SP_GetAreaStr'
- --go
- exec SP_GetAreaStr 28
- go
查询结果:中国安徽省宿州市灵璧县
所用表结构:
部分数据:
以上所述是小编给大家介绍的SQL Server 树形表非循环递归查询的实例详解的相关知识,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
来源: http://www.phperz.com/article/17/0906/339247.html