Tabelul Evaluate cu Funcția Recursivă CTE

0

Problema

Doar pentru distracție, încerc să scriu o masă evaluate funcție pentru a genera un tabel de date. Pentru testare, sunt greu de codificare a valorilor care ar trebui să fie trecut în variabile.

De la sine, acest lucru funcționează:

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);

Notă OPTION la sfârșitul anului.

Ca o funcție, acesta nu va funcționa decât dacă am elimina OPTION clauza de la sfârșitul:

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)
;

Pentru datele de test, e OK, dar va eșua cu siguranță dacă I-l dau întâlnire la începutul anului, deoarece implică mai mult de 100 de reveniri.

Există o sintaxa corectă pentru acest lucru, sau este un alt eroare Microsoft Capriciu care are nevoie de o soluție?

1

Cel mai bun răspuns

0

Eu cred că acest lucru poate fi raspunsul.

Într-un răspuns la o altă întrebare, @GarethD membre:

Dacă tu crezi că o vezi mai mult ca un stocate subinterogare decât un stocate interogare ... și amintiți-vă că definiția sa este extins în principal de interogare ...

(Sintaxă incorectă Lângă cuvântul Cheie "OPȚIUNEA" în CTE Declarație).

În cazul în care este cazul, un punct de vedere nu poate include orice, care nu pot fi incluse într-o subinterogare. Care include ORDER BY clauza și indicii, cum ar fi OPTION.

Eu am încă pentru a face sigur, dar pot să presupun că același lucru este valabil pentru o Masă Evaluată Funcția. Dacă este așa, răspunsul este nu, nu există nici o modalitate de a include OPTION clauză.

Rețineți că alte DBMSs sunt mai permisive în ceea ce poate fi inclus în subinterogari, așa că să nu vă imaginați că au aceleași limitări.

2021-11-28 09:29:14

În alte limbi

Această pagină este în alte limbi

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