SQL Server rekursiv CTE

SQL Server rekursiv CTE
Vanlige tabelluttrykk, eller CTE for kort, er en nyttig funksjon i SQL som lar deg definere et midlertidig navngitt resultatsett som en annen spørring kan bruke.

En rekursiv CTE, på hånden, er et CTE -uttrykk som refererer til seg selv. En rekursiv CTE fungerer ved å returnere et undergruppe og refererer deretter til den returnerer alle resultatene.

Rekursive CTE-er er nyttige når du spørrer nestet/flernivå eller hierarkiske datasett. For eksempel, hvis du har en komponent som inneholder andre data og at data inneholder andre nestede data, er en rekursiv CTE en god måte å spørre slike data.

SQL Server rekursiv CTE

Følgende viser syntaks for å utføre en rekursiv CTE:

Med Expression_name (column_list)
SOM
(
initial_query
Union alle
rekursive_query
)
PLUKKE UT *
Fra Expression_Name

Eksempel - Grunnleggende rekursivt CTE -eksempel

Følgende eksempel viser grunnleggende bruk av den rekursive CTE -funksjonen i SQL Server:

med CTE (n) som
(
PLUKKE UT
1
Union alle
PLUKKE UT
n + 1
FRA
CTE
HVOR
n < 5
)
PLUKKE UT
*
FRA
CTE;

Produksjon:

n |
-+
1 |
2 |
3 |
4 |
5 |

Eksempel 2 - Bruke CTE for å beregne ukens dag.

Følgende eksempel viser hvordan du bruker rekursiv CTE for å bestemme antall dager i løpet av en uke.

Med cte_exec (n,
ukedag)
SOM (
PLUKKE UT
0,
DateName (W, 0)
Union alle
PLUKKE UT
n + 1,
DateName (W, N + 1)
FRA
CTE_EXEC
HVOR
n < 6
)
PLUKKE UT
ukedag
FRA
cte_exec;

Den resulterende utgangen er som vist:

Konklusjon

Dette er det grunnleggende om å jobbe med rekursive CTE -er i SQL Server.