【发布时间】:2015-07-02 15:18:35
【问题描述】:
我想根据我选择的日期显示数据,[fnDateTxtToWeekNum] 会返回我选择的日期的 weeknum,weeknum 是 [fnBenchmarkData] 的一个参数,所有可用的 weeknum 信息都存储在 dbo.Weeks 表中。
我收到此错误:
"最大存储过程、函数、触发器或视图嵌套级别 超过(限制 32)。”
SELECT p.weeknum, p.date, q.ID, q.score
FROM dbo.Weeks AS p
cross apply
[dbo].fnBenchmarkData(p.weeknum) as q
where weeknum = [dbo].[fnDateTxtToWeekNum]('2015-07-02')
是不是因为我引用了 weeknum 两次并且函数自己调用它? fnBenchmarkData 上的 @weeknum 引用 dbo.weeks(基本上如果没有 where 子句,此 SQL 将返回所有周的所有数据)。然后我使用 fnDateTxtToWeeknum,它会返回一个星期数,基本上我创建了一个过滤器,因此 SQL 将只显示我需要的特定星期的数据(将我输入的日期转换为星期数)。
/* 我需要最终输出同时包含周数、日期、ID 和分数。 fnBenchmarkData 本身不会返回 weeknum 和日期信息,这就是我需要使用交叉应用的原因。 */
【问题讨论】:
-
可以肯定的是,通过让函数自己调用,您已经设置了一个无限循环,除非您未显示的代码的某些部分会破坏循环。
-
@TabAlleman 这没有任何意义,最后一行如果我只使用 where weeknum = 777,SQL 将只返回第 777 周的数据。我所做的唯一更改是添加一个函数将我输入的日期转换为 777,仍然不明白为什么它是无限循环。
-
无法从您发布的 sn-p 中分辨出来。您需要发布这两个函数的完整代码。
标签: sql sql-server function tsql where