У меня есть следующий код для UDF, но он выдает сообщение об ошибке:
Сообщение 156, Уровень 15, Состояние 1, Процедура
CalendarTable, строка 39 неверна
синтаксис рядом с ключевым словом «OPTION».
это из-за моего оператора 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