Z tohoto vlákna fóra MSDN jsem se dozvěděl, že
[the]
OPTION
klauzuli lze použít pouze na úrovni příkazuNemůžete jej tedy použít ve výrazu dotazu v definicích zobrazení nebo v inline TVF atd. Jediný způsob, jak to ve vašem případě použít, je vytvořit TVF bez
OPTION
klauzuli a specifikujte ji v dotazu, který používá TVF. Máme chybu, která sleduje požadavek na povolení použitíOPTION
klauzule uvnitř libovolného výrazu dotazu (napříkladif exists()
nebo CTE nebo zobrazení).
a dále
Výchozí hodnotu této možnosti uvnitř souboru udf nemůžete změnit. Budete to muset udělat v prohlášení odkazujícím na udf.
Takže ve vašem příkladu musíte zadat OPTION
když zavoláte vaše funkce:
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
)
(později)
SELECT * FROM [liste_jour] ( @from , @to ) OPTION ( MAXRECURSION 365 )
Všimněte si, že to nemůžete obejít tím, že budete mít druhý TVF, který dělá pouze výše uvedený řádek - pokud to zkusíte, dostanete stejnou chybu. "[the] OPTION
klauzuli lze použít pouze na úrovni příkazů“, a to je (prozatím) konečné.