【问题标题】:How and where do I set the MAXRECURSION option?如何以及在哪里设置 MAXRECURSION 选项?
【发布时间】:2017-01-26 22:25:25
【问题描述】:

我有一个查询用尽了默认的 MAXRECURSION 限制 100。给我以下错误消息:

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

我发现我需要使用OPTION (MAXRECURSION xxx) 提高此 CTE 的限制,但我不知道该放在哪里。

到目前为止,我已尝试将它放在我定义 CTE 的位置旁边,但它不起作用。我也尝试了几个不同的地方,它也不起作用。我每次得到的错误是:

关键字“OPTION”附近的语法不正确。

那么我应该将OPTION (MAXRECURSION XXX) 命令放在我的SQL 中的什么位置?

with
    tab (id,start,en) AS (
                  SELECT 1, 100, 200
        UNION ALL SELECT 2, 200, 500
    ),
    cte (id,start,en) AS (
        SELECT id, start, en FROM tab
        UNION ALL
        SELECT id, start+1, en FROM cte WHERE start+1 <= en
    )
SELECT id, start
FROM cte
ORDER BY id

【问题讨论】:

  • Gabe:如果你运行上面的查询,你会得到递归最大值 100,因为范围在 200-500 之间。如果您删除此选择,它会很好地工作。所以唯一的选择就是使用 OPTION (MAXRECURSION 1000) 但每次我把这个语句放在我认为会抱怨的东西旁边时都会抱怨:关键字“OPTION”附近的语法不正确。我已经修改了问题。

标签: sql-server tsql


【解决方案1】:
with tab AS 
(
    select 1 as id, 100 as start, 200 as en
    union all
    select 2, 200, 500),
    cte AS
    (
        select id,start,en from tab
        union all
        select id,start+1 , en from cte where start+1<=en
    )

SELECT id,start from cte
order by id
OPTION (MAXRECURSION 1000)

【讨论】:

  • 没有意识到我需要放在最后一个 select 语句下。 :) 我试图放入 CTE 或 TAB 部分。谢谢
猜你喜欢
  • 1970-01-01
  • 2017-10-05
  • 1970-01-01
  • 2011-11-08
  • 2011-11-17
  • 1970-01-01
  • 2011-11-17
  • 2011-09-04
  • 1970-01-01
相关资源
最近更新 更多