使用CTE为什么我无法打印1到1000或更多但是1到100我能够打印

时间:2018-04-16 10:50:25

标签: sql-server

with cte
as
(select 1 number
union all 
select number+1 from cte where number <1000)
select * from cte

显示错误:

  

声明终止。在语句完成之前,最大递归100已经用尽。

1 个答案:

答案 0 :(得分:2)

错误告诉你问题所在,默认情况下,CTE的最大递归为100.这是故意的,因为它会阻止编码不良的CTE取出服务器并将其停止运行。

您可以使用OPTION MAXRECURSION增加该值。因此,简单来说:

WITH CTE AS (
    SELECT 1 AS I
    UNION ALL
    SELECT I + 1 AS I
    FROM CTE
    WHERE I + 1 <= 1000)
SELECT *
FROM CTE
OPTION (MAXRECURSION 1000);

CTE文档中涵盖了这一点:Using MAXRECURSION to cancel a statement