От тази тема на MSDN форумите научавам, че
[]
OPTIONклаузата може да се използва само на ниво изразТака че не можете да го използвате в израз на заявка в дефинициите на изглед или вградени TVF и т.н. Единственият начин да го използвате във вашия случай е да създадете TVF без
OPTIONклауза и я посочете в заявката, която използва TVF. Имаме грешка, която проследява заявката за разрешаване на използването наOPTIONклауза във всеки израз на заявка (напримерif exists()или CTE или преглед).
и още
Не можете да промените стойността по подразбиране на тази опция в udf. Ще трябва да го направите в изявлението, отнасящо се до udf.
Така че във вашия пример трябва да посочите OPTION когато визвъните вашата функция:
CREATE FUNCTION [liste_jour]
(@debut date,@fin date)
RETURNS TABLE
AS
RETURN
(
WITH CTE as(
SELECT @debut as jour
UNION ALL
SELECT DATEADD(day, 1, jour)
FROM CTE
WHERE DATEADD(day, 1, jour) <= @fin)
SELECT jour FROM CTE -- no OPTION here
)
(по-късно)
SELECT * FROM [liste_jour] ( @from , @to ) OPTION ( MAXRECURSION 365 )
Имайте предвид, че не можете да заобиколите това, като имате втори TVF, който просто изпълнява горния ред - получавате същата грешка, ако опитате. „[] OPTION клаузата може да се използва само на ниво изявление", и това е окончателно (засега).