对于递归的CTE,以你的这个例子来说,
第一句sql: 这个select * from t_tree
where node_name= N'辽宁省'称为定位成员,SQL Server通过此语句来判断是否继续进行递归。
第二句sql:select a.* from t_tree a, district b
where a.parent_id = b.id 称之为递归成员,其特征为from子句中引用了CTE对象自身。
递归的终止依赖于定位点成员的,如果理解了这一点,也就理解了递归查询的执行方式。
cte递归的时候实际上你可以看做将整个表的记录,逐条的放入语句中执行(不在定位成员中的记录进入递归部分执行),只有满足条件的语句才会打印出来。
回答你的问题:根据上面黑体部分,表的记录循环结束,也就跳出递归了。
可以通过查询计划来看到更多的信息,或者参考MSDN相关文章。
family as water