【发布时间】:2017-04-04 15:12:16
【问题描述】:
我已经创建了用于将日期输入到我的 Gridview 中的 SQL 函数,因此我将开始日期和结束日期传递给我的函数,但出现如下错误。
The maximum recursion 100 has been exhausted before statement completion
如果计数日期大于 100 意味着出现上述错误,如果低于 100 意味着没有出现任何错误。我有超过 100 天的记录。
下面是我的数据逻辑。
public DataTable GetDates(DateTime StartDate, DateTime EndDate)
{
DataTable dt = new DataTable();// order by dt desc
ConnectMethod();
cmd = new SqlCommand("select dt from dbo.ExplodeDates(@StartDate,@EndDate) order by dt desc", con);
try
{
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@StartDate", StartDate);
cmd.Parameters.AddWithValue("@EndDate", EndDate);
cmd.ExecuteScalar();
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);
return dt;
}
catch (Exception ex)
{ return dt; }
finally
{
con.Close();
con.Dispose();
cmd.Dispose();
}
}
我在 cmd.ExecuteScalar(); 上收到此错误;线。 下面是我的 SQL 函数。
CREATE FUNCTION [dbo].[ExplodeDates](
@startdate datetime
, @enddate datetime
)
RETURNS TABLE
AS
RETURN
WITH DATES AS(
SELECT @startdate AS dt
UNION ALL
SELECT DATEADD(D, 1, dt) FROM DATES WHERE DT<@enddate
)
SELECT * FROM DATES
GO
请帮助解决这个问题,从早上开始查看结果。
【问题讨论】:
-
只是不要那样做。创建一个包含大量年份的日历表。每年只有 365 行,它不占用空间但极大地提高了性能
-
我的网站已经上线,请帮助如何仅修改此代码或更新您的答案。 @Panagiotis Kanavos
-
查看 Aaron Bertrand 的 Creating a date dimension or calendar table in SQL Server。 50 年的日期需要 3MB。您可以使用文章的技术来避免递归,但是当您可以简单地从 3MB 表中检索所需的所有日期时计算一个日期范围?
-
不,我不想要那么多年,我的申请只需要 200 天,我们可以对我的上述相同功能进行 200 天的修改,请帮助。 @Panagiotis Kanavos
-
阅读文章,它已经包含了你需要的脚本。只需创建一个表并选择只有 200 天
标签: asp.net sql-server sql-server-2008