当前位置: 代码迷 >> Sql Server >> 递归查询解决办法
  详细解决方案

递归查询解决办法

热度:99   发布时间:2016-04-27 18:03:58.0
递归查询
我的表 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 行受影响)*/godrop table code_catalog_structure
------解决方案--------------------
以上几位同学都很认真的回答
  相关解决方案