Aus diesem Thread im MSDN-Forum erfahre ich das
[die] OPTION
-Klausel kann nur auf Anweisungsebene verwendet werden
Sie können es also nicht innerhalb eines Abfrageausdrucks innerhalb von Ansichtsdefinitionen oder Inline-TVFs usw. verwenden. Die einzige Möglichkeit, es in Ihrem Fall zu verwenden, besteht darin, das TVF ohne die OPTION
zu erstellen -Klausel und geben Sie sie in der Abfrage an, die die TVF verwendet. Wir haben einen Fehler, der die Anfrage zum Zulassen der Verwendung von OPTION
verfolgt -Klausel in einem beliebigen Abfrageausdruck (z. B. if exists()
). oder CTE oder Ansicht).
und weiter
Sie können den Standardwert dieser Option innerhalb einer UDF nicht ändern. Sie müssen dies in der Anweisung tun, die auf die UDF verweist.
In Ihrem Beispiel müssen Sie also die OPTION
angeben wenn Sie anrufen Ihre 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
)
(später)
SELECT * FROM [liste_jour] ( @from , @to ) OPTION ( MAXRECURSION 365 )
Beachten Sie, dass Sie dies nicht umgehen können, indem Sie ein zweites TVF haben, das nur die obige Zeile ausführt - Sie erhalten den gleichen Fehler, wenn Sie es versuchen. "[die] OPTION
-Klausel kann nur auf Anweisungsebene verwendet werden", und das ist (vorerst) endgültig.