Sql server 如何在查询中产生递归?“With”有什么用?它是如何内在运作的?

Sql server 如何在查询中产生递归?“With”有什么用?它是如何内在运作的?,sql-server,sql-server-2005,tsql,recursion,oop,Sql Server,Sql Server 2005,Tsql,Recursion,Oop,为什么此查询完成时出错 ;with tempData as ( select 32 as col1, char(32) as col2 union all select col1+1, char(col1+1) from tempData ) select * from tempData 您有一个无限循环:它应该在哪里结束?递归需要一个终止条件。比如说 ;with tempData as ( select 32 as col1, char(

为什么此查询完成时出错

;with tempData as
 (
        select 32 as col1, char(32) as col2
        union all
        select col1+1, char(col1+1) from tempData
 )
select * from tempData

您有一个无限循环:它应该在哪里结束?

递归需要一个终止条件。比如说

;with tempData as ( 
select 32 as col1, char(32) as col2 
union all 
select col1+1, char(col1+1) from tempData 
where col1 < 255
) 
select * from tempData
option (maxrecursion 223)

关于标题中关于它如何在内部工作的问题,请参见。

您是对的,它的无限循环,但我想知道它的循环是如何工作的,因为我不知道“With”如何工作。-谢谢您的回答,它的退出信息丰富,但现在我想知道什么是optionmaxrecursion 0?@Jeevan-默认情况下,CTEs将在100个级别后停止递归。optionmaxrecursion 0意味着如果您有一个无限循环,它将无限期地继续递归,或者至少直到SSMS耗尽资源-1表示没有阅读MSDN,但仍然设法错误地进入无限循环