Dari utas forum MSDN ini saya mengetahui bahwa
[yang]
OPTIONklausa hanya dapat digunakan pada tingkat pernyataanJadi Anda tidak dapat menggunakannya dalam ekspresi kueri di dalam definisi tampilan atau TVF sebaris, dll. Satu-satunya cara untuk menggunakannya dalam kasus Anda adalah dengan membuat TVF tanpa
OPTIONklausa dan tentukan dalam kueri yang menggunakan TVF. Kami memiliki bug yang melacak permintaan untuk mengizinkan penggunaanOPTIONklausa di dalam ekspresi kueri apa pun (misalnya,if exists()atau CTE atau lihat).
dan selanjutnya
Anda tidak dapat mengubah nilai default opsi itu di dalam udf. Anda harus melakukannya dalam pernyataan yang merujuk pada udf.
Jadi dalam contoh Anda, Anda harus menentukan OPTION saat Anda menelepon fungsi Anda:
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
)
(nanti)
SELECT * FROM [liste_jour] ( @from , @to ) OPTION ( MAXRECURSION 365 )
Perhatikan bahwa Anda tidak dapat mengatasi ini dengan memiliki TVF kedua yang hanya melakukan baris di atas - Anda mendapatkan kesalahan yang sama, jika Anda mencoba. "[yang] OPTION klausa hanya dapat digunakan pada tingkat pernyataan", dan itu final (untuk saat ini).