Uit deze MSDN-forumthread leer ik dat
[de] OPTION
clausule kan alleen worden gebruikt op het niveau van de instructie
U kunt het dus niet gebruiken binnen een query-uitdrukking binnen weergavedefinities of inline TVF's enz. De enige manier om het in uw geval te gebruiken, is door de TVF te maken zonder de OPTION
clausule en specificeer deze in de query die gebruikmaakt van de TVF. We hebben een bug die het verzoek volgt om het gebruik van OPTION
toe te staan clausule binnen een query-expressie (bijvoorbeeld if exists()
of CTE of bekijk).
en verder
U kunt de standaardwaarde van die optie niet wijzigen in een udf. U moet dit doen in de verklaring die verwijst naar de udf.
Dus in uw voorbeeld moet u de OPTION
. specificeren wanneer u belt jouw functie:
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
)
(later)
SELECT * FROM [liste_jour] ( @from , @to ) OPTION ( MAXRECURSION 365 )
Merk op dat je dit niet kunt omzeilen door een tweede TVF te hebben die alleen de bovenstaande regel doet - je krijgt dezelfde fout als je het probeert. "[de] OPTION
clausule kan alleen worden gebruikt op het niveau van de instructie", en dat is definitief (voorlopig).