De ce fil de discussion sur les forums MSDN, j'apprends que
[la]
OPTION
la clause ne peut être utilisée qu'au niveau de l'instructionVous ne pouvez donc pas l'utiliser dans une expression de requête dans des définitions de vue ou des TVF en ligne, etc. La seule façon de l'utiliser dans votre cas est de créer le TVF sans l'
OPTION
clause et spécifiez-la dans la requête qui utilise TVF. Nous avons un bogue qui suit la demande d'autorisation d'utilisation deOPTION
clause à l'intérieur de toute expression de requête (par exemple,if exists()
ou CTE ou vue).
et plus loin
Vous ne pouvez pas modifier la valeur par défaut de cette option dans un udf. Vous devrez le faire dans la déclaration faisant référence à l'udf.
Donc dans votre exemple, vous devez spécifier le OPTION
lorsque vous appelez votre fonction :
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
)
(plus tard)
SELECT * FROM [liste_jour] ( @from , @to ) OPTION ( MAXRECURSION 365 )
Notez que vous ne pouvez pas contourner cela en ayant un deuxième TVF qui fait juste la ligne ci-dessus - vous obtenez la même erreur, si vous essayez. "[l'] OPTION
clause ne peut être utilisée qu'au niveau de l'instruction", et c'est définitif (pour l'instant).