От тази тема на 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
клаузата може да се използва само на ниво изявление", и това е окончателно (засега).