From this MSDN forums thread I learn that
[the] OPTION
clause can be used only at the statement level
So you cannot use it within a query expression inside view definitions or inline TVFs etc. The only way to use it in your case is to create the TVF without the OPTION
clause and specify it in the query that uses the TVF. We have a bug that tracks request for allowing use of OPTION
clause inside any query expression (for example, if exists()
or CTE or view).
and further
You can not change the default value of that option inside a udf. You
will have to do it in the statement referencing the udf.
So in your example, you must specify the OPTION
when you call your function:
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
)
(later)
SELECT * FROM [liste_jour] ( @from , @to ) OPTION ( MAXRECURSION 365 )
Note that you can't work round this by having a second TVF that just does the above line - you get the same error, if you try. "[the] OPTION
clause can be used only at the statement level", and that's final (for now).
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…