SQL2005递归查询语法

create table code_catalog_structure(catalogid nvarchar(10),col varchar(10),parentid nvarchar(10))
insert into code_catalog_structure select '我是一层的一','aaa','*ROOT*'
insert into code_catalog_structure select '我是一层的二','bbb','*ROOT*'
insert into code_catalog_structure select '我是二层的一','ccc','我是一层的一'
insert into code_catalog_structure select '我是二层的二','ddd','我是一层的二'
insert into code_catalog_structure select '我是三层的一','eee','我是二层的一'
insert into code_catalog_structure select '我是三层的二','fff','我是二层的二'
insert into code_catalog_structure select '我是三层的三','ggg','我是二层的二'
go
;with father as
(
  select *,lev=0,seq=CAST(catalogid AS VARBINARY) from code_catalog_structure where parentid = '*ROOT*'  
  union all
  select a.*,lev=lev+1,seq=CAST(seq+CAST(a.catalogid AS VARBINARY) AS VARBINARY) from code_catalog_structure a join father b on a.parentid = b.catalogid
)
select parentid,catalogid,lev,seq from father order by seq
/*
parentid   catalogid  lev
---------- ---------- -----------
*ROOT*	我是一层的一	0
我是一层的一	我是二层的一	1
我是二层的一	我是三层的一	2
*ROOT*	我是一层的二	0
我是一层的二	我是二层的二	1
我是二层的二	我是三层的二	2
我是二层的二	我是三层的三	2

(7 行受影响)

*/
go
drop table code_catalog_structure

你可能感兴趣的:(sql2005)