ITPub博客

首页 > 数据库 > SQL Server > SQL Server学习笔记:递归查询

SQL Server学习笔记:递归查询

SQL Server 作者:笨小孩1985 时间:2013-03-30 11:21:48 0 删除 编辑


--建立测试数据
create table dept(id int primary key,parent_id int,name nvarchar(20))
insert dept
select 0,0,N'<全部>' union all
select 1,0,N'财务部' union all
select 2,0,N'行政部' union all
select 3,0,N'业务部' union all
select 4,0,N'市场部' union all
select 5,4,N'销售部' union all
select 6,4,N'MIS' union all
select 7,6,N'UI' union all
select 8,6,N'软件开发' union all
select 9,8,N'内部开发'

go

--全部数据
-- select *from dept

--删除测试数据
-- drop table dept

declare @dept int
set @dept=4

--SQL Server 2000 临时表配合循环查询
declare @t table (id int primary key,parent_id int,name nvarchar(20))
insert @t select * from dept where id =@dept
while @@rowcount>0
    insert @t select a.* from dept as a inner join @t as b
    on a.parent_id=b.id and a.id not in(select id from @t)
select * from @t

--SQL Server 2005 使用CTE递归查询(递归时,注意把定位点中的数据排除)
; with depts as (
    select *from dept where id=@dept
    union all
    select a.* from dept a join depts b on a.parent_id=b.id and a.ID<>a.parent_ID)

select *from depts
go

<!-- 正文结束 -->

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22592182/viewspace-1118036/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2009-09-24