Como crear un CTE Recursivo SQListo: CTE Recursivo SQListo
¿Quiero hacer un ciclo por Numero o Fechas, como lo hago?
Para crear un CTE Recursivo SQListo primero debemos entender que es un CTE, segun la ayuda oficial de microsoft dice:
1 2 3 4 5 6 7 8 9 |
WITH CTE_NUMERO ( Numero ) AS ( SELECT 1 UNION ALL SELECT Numero +1 FROM CTE_NUMERO ) SELECT Numero FROM CTE_NUMERO |
Este, CTE demuestra lo que ocurre cuando se codifica un bucle infinito. Este CTE sólo genera una lista de números a partir de 1 e incrementa 1 por cada nuevo número devuelto por el CTE. Debido a que la parte recursiva de este CTE no indica un punto de parada, la configuración MAXRECUSION controlará cuando esta consulta de recursión se detendrá.
1 |
Msg 530, Nivel 16, Estado 1, Línea 1 |
La declaración terminó. La recursión máxima 100 se ha agotado antes de completar la declaración.
Después de que se produzca el error, si observa la salida producida, verá que se crearon 101 números diferentes.
Si la lógica de su CTE queridos lectores requieren más iteración que el valor predeterminado para MAXRECUSION, puede reemplazar el número predeterminado mediante la sugerencia de consulta MAXRECURSION.
1 2 3 4 5 6 7 8 9 10 11 12 |
WITH CTE_NUMERO ( Numero ) AS ( SELECT 1 UNION ALL SELECT Numero +1 FROM CTE_NUMERO ) SELECT Numero FROM CTE_NUMERO OPTION(MAXRECURSION 200);<b style="font-family: verdana, arial, helvetica; font-size: 13px; white-space: pre-wrap;"> </b> |
Aquí tienen que tener en cuenta que como es un bucle infinito seguiremos teniendo el mismo error Msg 530, Nivel 16, Estado 1, Línea 1 para resolver que no tengamos este error modificaremos
1 2 3 4 5 6 7 8 9 10 11 |
WITH CTE_NUMERO ( Numero ) AS ( SELECT 1 UNION ALL SELECT Numero +1 FROM CTE_NUMERO WHERE Numero ) SELECT Numero FROM CTE_NUMERO <b>OPTION</b>(MAXRECURSION 200); |
-
- El Máximo en MaxRecursion es de 32.767
-
- Pueden colocar MaxRecursion puede ser Cero y no tendrá limite,(CUIDADO con esta opción pueden dejar al server sin memoria)
-
- Luego de 1000 itereaciones el CTE crea en la base de datos tempdb un cursos interno para manejar los registros del mismo