我的表 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
------解决方案--------------------
以上几位同学都很认真的回答