我現在面臨一個問題,聲明TVF內的CTE的MAXRECURSION選項如何設置表值,函數內的CTE的MAXRECURSION選項
這裏是CTE(一個簡單的日曆):
DECLARE @DEBUT DATE = '1/1/11', @FIN DATE = '1/10/11';
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 option (maxrecursion 365)
和TVF:
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
--option (maxrecursion 365)
)
上述TVF是沒有MAXRECURSION選項 運行正常,但有一個與選項語法錯誤。 解決方案是什麼?
問候
這個答案可能會好一點,因爲在函數中沒有必要記住關於CTE(沒有遞歸限制)。 –
當然,它解決了問題,但它有「可能的缺點」,因爲這個表值函數是「非內聯」的。在性能方面它可能是非常殘酷的。 – pkuderov
正如我所說,「這可能有效率問題,但我可以負擔得起這個。」 – Crisfole