แค่เรื่องสนุก,ฉันพยายามจะเขียนเป็นโต๊ะลที่มีคุณค่าของฟังก์ชันเพื่อสร้างเป็นโต๊ะของวันที่ สำหรับการทดสอบจุดประสงค์,ฉันอยากเขียนโปรแกรนค่าที่ควรจะผ่านในตัวแปร.
โดยตัวมันเองนี้ทำงาน:
WITH cte AS (
SELECT cast('2021-10-01' AS date) AS date
UNION ALL
SELECT dateadd(day,1,date) FROM cte WHERE date<current_timestamp
)
SELECT * FROM cte OPTION(maxrecursion 0);
ข้อค OPTION
ตอนที่ทุกอย่างจะจบลง
เป็นงานมันจะไม่ทำงานถ้าฉันลบ OPTION
เงื่อนไขว่าที่สิ้นสุด:
CREATE FUNCTION dates(@start date, @rows INT) RETURNS TABLE AS
RETURN
WITH cte AS (
SELECT cast('2021-10-01' AS date) AS date
UNION ALL
SELECT dateadd(day,1,date) FROM cte WHERE date<current_timestamp
)
SELECT * FROM cte -- OPTION(maxrecursion 0)
;
สำหรับการทดสอบข้อมูลนั่นโอเคแต่มันจะแน่นอนล้มเหลวถ้าฉันให้มันวันที่จุดเริ่มต้นของปีตั้งแต่มันเกี่ยวข้องกับมากกว่า 100 recursions.
มีไวยากรณ์ที่ถูกต้องสำหรับเรื่องนี้หรือเป็นอีกไมโครซอฟ Quirk ซึ่งต้องการ workaround?