我有UDF的以下代码,但是它与消息有错误:
Msg 156,第15级,状态1,过程CalendarTable,第39行在关键字‘选项’附近不正确的语法。
是因为我的WITH语句,因为我可以在存储过程中运行相同的代码吗?
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: Anthony Main
-- Create date: 18/11/08
-- Description: Produce Table of Dates for Month
-- =============================================
CREATE FUNCTION CalendarTable
(
@StartDate DATETIME,
@EndDate DATETIME
)
RETURNS TABLE
AS
RETURN
(
with MyCalendar as
(
select cast(@StartDate as datetime) DateValue
union all
select DateValue + 1
from MyCalendar
where DateValue + 1 <= @EndDate
)
select DateValue
, datepart(dy, DateValue) [day of year]
, datename(dw, DateValue) [day]
, datepart(dw, DateValue-1) [day of week]
, datepart(dd, DateValue) [day of month]
, datepart(ww, DateValue) [week]
, datepart(mm, DateValue) [month]
, datename(mm, DateValue) [month]
, datepart(qq, DateValue) [quarter]
, datepart(yy, DateValue) [year]
, datepart(HH, DateValue) [HOUR]
, datepart(MI, DateValue) [MIN]
, datepart(SS, DateValue) [SEC]
, datepart(MS, DateValue) [MILLISECOND]
from MyCalendar
OPTION (MAXRECURSION 0)
)
GO发布于 2008-11-26 02:09:08
不,你不能使用选项关键字。
在文档中:"MAXRECURSION可用于防止格式错误的递归CTE进入无限循环。下面的示例有意创建一个无限循环,并使用MAXRECURSION提示将递归级别的数量限制为两个。“
如果您解释了您想要查询的内容(您希望最终的结果是什么),我们可以编写一个更好的SQL语句,它不需要递归。
发布于 2008-11-21 00:25:40
据我所知,在UDF中不允许使用MAXRECURSION选项。在connect.microsoft.com有一个关于这个问题的项目。
发布于 2008-11-20 22:42:22
你是不是漏掉了一个结束托架?(“作为返回”()的结束括号
https://stackoverflow.com/questions/307122
复制相似问题