Fra denne MSDN-forum-tråd lærer jeg det
[den] OPTION
klausul kan kun bruges på sætningsniveauet
Så du kan ikke bruge det i et forespørgselsudtryk inde i visningsdefinitioner eller inline TVF'er osv. Den eneste måde at bruge det i dit tilfælde er at oprette TVF'et uden OPTION
klausul og angiv den i forespørgslen, der bruger TVF. Vi har en fejl, der sporer anmodning om at tillade brug af OPTION
klausul inde i et hvilket som helst forespørgselsudtryk (f.eks. if exists()
eller CTE eller view).
og videre
Du kan ikke ændre standardværdien for denne indstilling inde i en udf. Du bliver nødt til at gøre det i erklæringen, der henviser til udf.
Så i dit eksempel skal du angive OPTION
når du ringer din funktion:
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
)
(senere)
SELECT * FROM [liste_jour] ( @from , @to ) OPTION ( MAXRECURSION 365 )
Bemærk, at du ikke kan omgå dette ved at have en anden TVF, der bare udfører ovenstående linje - du får den samme fejl, hvis du prøver. "[den] OPTION
klausul kan kun bruges på sætningsniveau", og det er endeligt (indtil videre).