โต๊ะลที่มีคุณค่าของฟังก์ชันกับ Recursive CTE

0

คำถาม

แค่เรื่องสนุก,ฉันพยายามจะเขียนเป็นโต๊ะลที่มีคุณค่าของฟังก์ชันเพื่อสร้างเป็นโต๊ะของวันที่ สำหรับการทดสอบจุดประสงค์,ฉันอยากเขียนโปรแกรนค่าที่ควรจะผ่านในตัวแปร.

โดยตัวมันเองนี้ทำงาน:

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?

1

คำตอบที่ดีที่สุด

0

ฉัน คิดว่า นี่อาจจะเป็นคำตอบ

ในคำตอบสำหรับคำถามอีกคำถาม@GarethD รัฐ:

ถ้าคุณคิดว่าของมุมมองอีกเป็นที่เก็บไว้ subquery กว่าถูกจัดเก็บการค้นหาและจำไว้ว่ามันความเป็นตัวขยายออกเข้าหลักกับการค้นหา...

(ไวยากรณ์ไม่ถูกต้องใกล้กับคำค้น'ตัวเลือก'ใน CTE แถลงการณ์).

ถ้านั่นเป็นกรณีนี้เป็นมุมมองไม่สามารถรวมอะไรที่ไม่สามารถรวมอยู่ใน subquery. นั่นรวมถึงการค ORDER BY เงื่อนไขว่าคำใบ้ไว้และอย่างเช่น OPTION.

ผมก็เลยต้องทำให้แน่ใจแต่ฉันเดาว่านั่นคนเดียวกันไปสำหรับโต๊ะลที่มีคุณค่าของฟังก์ชัน. ถ้าอย่างนั้นคำตอบคือไม่ไม่มีทางที่รวม OPTION เงื่อนไขว่า.

โปรดสังเกตว่ากัน DBMSs เป็นมากก accommodating ในสิ่งที่สามารถจะถูกรวมอยู่ใน subqueries ดังนั้นฉันไม่คิดว่าพวกเขามีเหมือนกั limitations.

2021-11-28 09:29:14

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่