Z tego wątku na forach MSDN dowiaduję się, że
[the] OPTION
klauzula może być użyta tylko na poziomie instrukcji
Dlatego nie można go używać w wyrażeniu zapytania wewnątrz definicji widoku lub wbudowanych funkcji TVF itp. Jedynym sposobem użycia go w twoim przypadku jest utworzenie funkcji TVF bez OPTION
klauzuli i określ ją w zapytaniu, które używa funkcji TVF. Mamy błąd, który śledzi prośbę o zezwolenie na użycie OPTION
klauzula wewnątrz dowolnego wyrażenia zapytania (na przykład if exists()
lub CTE lub widok).
i dalej
Nie możesz zmienić domyślnej wartości tej opcji w UDF. Musisz to zrobić w oświadczeniu odnoszącym się do udf.
Więc w swoim przykładzie musisz określić OPTION
kiedy zadzwonisz Twoja funkcja:
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
)
(później)
SELECT * FROM [liste_jour] ( @from , @to ) OPTION ( MAXRECURSION 365 )
Zauważ, że nie możesz tego obejść, mając drugi TVF, który wykonuje powyższą linię - otrzymasz ten sam błąd, jeśli spróbujesz. "[the] OPTION
klauzula może być użyta tylko na poziomie instrukcji”, i to już koniec (na razie).