【问题标题】:Maxrecursion and Column caused an overflow errorsMaxrecursion 和 Column 导致溢出错误
【发布时间】:2014-12-31 22:55:02
【问题描述】:

我收到此查询的最大递归错误。

WITH [Days] AS
(   
    SELECT DATENAME(weekday,getdate()) AS NameOfDay
          ,DAY(GETDATE()) AS NumberOfDay
          ,GETDATE() AS curDate
    UNION ALL
    SELECT DATENAME(WEEKDAY,DATEADD(day, -1, curDate)) As NameOfDay
          ,DAY(DATEADD(DAY, -1, curDate)) AS NumberOfDay
          ,DATEADD(DAY, -1, curDate) AS curDate
    FROM [Days]
    WHERE DAY(GETDATE()) - DAY(DATEADD(DAY, -1, curDate)) >= 0
)
SELECT NameOfDay
FROM [Days]  
ORDER BY NumberOfDay 

错误是:

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

当我将option (maxrecursion 0) 添加到查询中时,我收到此错误:

向“日期时间”列添加值导致溢出。

我不知道如何解决这些错误。任何帮助将不胜感激。

谢谢。

【问题讨论】:

  • 你想达到什么目的?
  • 我正在尝试根据当前周获取日期的名称。
  • @Arpita 基于当前周的天数?什么?我不明白。你预计有多少记录?
  • 调试此类问题的一个有用技巧是添加一个从 1 开始并向上计数的列。更改终止条件以将计数限制为合理值并检查结果 (*)。您可能希望为您的 WHERE 条件中的值添加列,以便更轻松地查看误入歧途的内容。
  • @king.code - 我的意思是今天,我想在表格中显示星期一、星期二和星期三。明天,我想显示星期一、星期二、星期三和星期四。

标签: tsql sql-server-2012


【解决方案1】:

你可以试试这个:

SET DATEFIRST 7;
GO
WITH [Days] AS
(   
    SELECT DATENAME(WEEKDAY, GETDATE()) AS NameOfDay
          ,DAY(GETDATE()) AS NumberOfDay
          ,GETDATE() AS curDate
    UNION ALL
    SELECT DATENAME(WEEKDAY,DATEADD(day, -1, curDate)) As NameOfDay
          ,DAY(DATEADD(DAY, -1, curDate)) AS NumberOfDay
          ,DATEADD(DAY, -1, curDate) AS curDate
    FROM [Days]
    WHERE DATEPART(WEEKDAY, DATEADD(DAY, -1, curDate)) >= 2
)
SELECT NameOfDay
FROM [Days]

【讨论】:

  • 明确允许 unlimited 递归的价值是否有可能使未来几周可能比 7 天长得多?或者只是有人可能更改了默认递归限制?
  • @HABO 我刚刚修改了WHERE 条件。 OPTION (MAXRECURSION 0) 可以删除。
  • @king.code 但是如果OPTION (MAXRECURSION 0)被删除,“语句完成前最大递归100已经用完”的错误会再次出现,对吧?
  • @Arpita 不。试试看。当 curDate - 1 是星期一时,递归将停止。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-04
  • 2012-07-03
  • 2011-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-03
相关资源
最近更新 更多