`
gwh_08
  • 浏览: 331970 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

递归查询

 
阅读更多

CTE递归原理:

     递归CTE是由两个最小查询构建的.第一个是定位成员(Anchor Member,AM),它是一个非递归查询,第二个是递归成员(Recursive Member,RM),它是递归查询.在CTE括号中(AS 子句之后),定义独立查询或引用回相同CTE的查询,AM与RM由UNION ALL语句分隔.AM紧被调用一次,RM将被重复调用,直到查询不在返回数据行为止.可以使用UNION或UNION ALL运算符彼此追加多个AM,具体取决于是否希望删除重复数据(必须使用UNION ALL运算符来追加递归成员).语法如下:

;WITH  SimpleRecursive ( id, pid )
AS ( SELECT id, pid  from  t_table 
	WHERE id = @id ---根节点
	UNION ALL
	SELECT  t.id, t.pid
	FROM  t_table as t
	INNER JOIN SimpleRecursive A ON (t.pid = A.id)
	)
SELECT  id,pid FROM SimpleRecursive 
OPTION(MAXRECURSION 25) 

 根据设计,递归成员将一直查找子记录,并可以无限循环.如果您怀疑将会进行许多循环,并希望限制递归调用次数,可以使用OPTION子句在外部查询的后面指定MAXRECURSION选项.

OPTION(MAXRECURSION 25)

 

这一选项将使sql server2005在cte出现指定限制时产生一条错误.默认情况下,限制为100(即省略该选项时).要不想指定选项.必须将MAXRECURSION设为0.

ok,CTE递归查询完成了.

分享到:
评论
2 楼 gwh_08 2014-11-19  
wswangyj 写道
伟华很勤奋啊

呵呵,就是感觉有记录的必要就记下了,向王哥学习。
1 楼 wswangyj 2014-11-18  
伟华很勤奋啊

相关推荐

Global site tag (gtag.js) - Google Analytics