日期:2014-05-18  浏览次数:20612 次

递归查询
我的表 code_catalog_structure(catalogid varchar(50),parentid(50),title varchar(50))
递归查询出 根 catalogid为 '*ROOT*' 的所有按层次查询出来,语句
with father as
(
  select *,lev=0 from code_catalog_structure where parentid = '*ROOT*' 
  union all
  select a.*,lev=lev+1 from code_catalog_structure a join father b on a.parentid = b.catalogid
)
select parentid,catalogid,lev from father
不明白的地方
1。为啥报“查询已完毕但有错误,消息 530,级别 16,状态 1,第 2 行
语句被终止。完成执行语句前已用完最大递归 100。”
2。查询结果应该是
比如
  *ROOT* 0
  我是一层 1
  我是一层的一 1
  我是二层 2
  我是二层的一 2
但是结果给来了
好几遍这样的
  *ROOT* 0
  我是一层 1
  我是一层的一 1
  我是二层 2
  我是二层的一 2
  *ROOT* 0
  我是一层 1
  我是一层的一 1
  我是二层 2
  我是二层的一 2
。。。。。
请指点,我想要的结果应该是指定catalogid得出它下面的所有,请给代码,查了好多帖子,结果大都死循环,谢谢

------解决方案--------------------
估计是数据有问题


超过100层要用 from father 后面加上 option (MAXRECURSION 0)
------解决方案--------------------
语句被终止。完成执行语句前已用完最大递归 100。”

------解决方案--------------------
你表中的数据不对.
注意这种结构表的数据:
SQL code
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 from code_catalog_structure where parentid = '*ROOT*'  
  union all
  select a.*,lev=lev+1 from code_catalog_structure a join father b on a.parentid = b.catalogid
)
select parentid,catalogid,lev from father
/*
parentid   catalogid  lev
---------- ---------- -----------
*ROOT*     我是一层的一     0
*ROOT*     我是一层的二     0
我是一层的二     我是二层的二     1
我是二层的二     我是三层的二     2
我是二层的二     我是三层的三     2
我是一层的一     我是二层的一     1
我是二层的一     我是三层的一     2

(7 行受影响)

*/
go
drop table code_catalog_structure

------解决方案--------------------
以上几位同学都很认真的回答