このMSDNフォーラムのスレッドから私はそれを学びます
[the]
OPTION
句はステートメントレベルでのみ使用できますしたがって、ビュー定義内のクエリ式やインラインTVFなどで使用することはできません。この場合に使用する唯一の方法は、
OPTION
なしでTVFを作成することです。 句を指定し、TVFを使用するクエリで指定します。OPTION
の使用を許可するリクエストを追跡するバグがあります クエリ式内の句(たとえば、if exists()
またはCTEまたはビュー)。
そしてさらに
udf内でそのオプションのデフォルト値を変更することはできません。 udfを参照するステートメントでそれを行う必要があります。
したがって、この例では、OPTION
を指定する必要があります 電話するとき あなたの機能:
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
)
(後で)
SELECT * FROM [liste_jour] ( @from , @to ) OPTION ( MAXRECURSION 365 )
上記の行を実行する2番目のTVFを使用してこれを回避することはできないことに注意してください。試してみると、同じエラーが発生します。 "[the] OPTION
句はステートメントレベルでのみ使用できます」、そしてそれは(今のところ)最後です。