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递归查询语法
最新推荐文章于 2017-11-14 13:37:11 发布