A partir deste tópico de fóruns do MSDN, aprendi que
[a]OPTION
cláusula pode ser usada apenas no nível de instrução
Portanto, você não pode usá-lo em uma expressão de consulta dentro de definições de exibição ou TVFs inline etc. A única maneira de usá-lo no seu caso é criar o TVF sem aOPTION
cláusula e especifique-a na consulta que usa o TVF. Temos um bug que rastreia a solicitação para permitir o uso deOPTION
cláusula dentro de qualquer expressão de consulta (por exemplo,if exists()
ou CTE ou vista).
e mais
Você não pode alterar o valor padrão dessa opção dentro de um udf. Você terá que fazer isso na declaração referenciando o udf.
Portanto, em seu exemplo, você deve especificar a
OPTION
quando você liga sua função: 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
)
(mais tarde)
SELECT * FROM [liste_jour] ( @from , @to ) OPTION ( MAXRECURSION 365 )
Observe que você não pode contornar isso tendo um segundo TVF que apenas faça a linha acima - você obtém o mesmo erro, se tentar. "[a]
OPTION
cláusula pode ser usada apenas no nível de instrução", e isso é final (por enquanto).