Da questo thread del forum MSDN apprendo che
[il] OPTION
la clausola può essere utilizzata solo a livello di istruzione
Quindi non puoi usarlo all'interno di un'espressione di query all'interno di definizioni di visualizzazione o TVF inline ecc. L'unico modo per usarlo nel tuo caso è creare il TVF senza OPTION
clausola e specificarlo nella query che utilizza la TVF. Abbiamo un bug che tiene traccia della richiesta per consentire l'uso di OPTION
clausola all'interno di qualsiasi espressione di query (ad esempio, if exists()
o CTE o visualizza).
e oltre
Non è possibile modificare il valore predefinito di tale opzione all'interno di un udf. Dovrai farlo nella dichiarazione che fa riferimento all'udf.
Quindi nel tuo esempio, devi specificare OPTION
quando chiama la tua funzione:
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
)
(più tardi)
SELECT * FROM [liste_jour] ( @from , @to ) OPTION ( MAXRECURSION 365 )
Nota che non puoi aggirare questo problema avendo un secondo TVF che esegue solo la riga sopra:ottieni lo stesso errore, se provi. "[il] OPTION
la clausola può essere utilizzata solo a livello di istruzione", e questo è definitivo (per ora).