Dari utas forum MSDN ini saya mengetahui bahwa
[yang]
OPTION
klausa 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
OPTION
klausa dan tentukan dalam kueri yang menggunakan TVF. Kami memiliki bug yang melacak permintaan untuk mengizinkan penggunaanOPTION
klausa 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).