WITH CTE
AS
(
SELECT i = 1
UNION ALL
SELECT i
+ 1
FROM CTE
WHERE i
<= 10
)
SELECT *
FROM CTE
OTRO EJEMPLO DE RECURSIVIDAD
DECLARE @Cadena VARCHAR (30);
SET @Cadena ='GPXDCWUJREMKIALVOTFNYBZSHQ';
WITH BURBUJA
AS
(
SELECT Id = 1
UNION ALL -- EL CÓDIGO DE ARRIBA SE EJECUTA UNA SOLA VEZ, MIENTRAS QUE ABAJO
ES RECURSIVO
SELECT Id + 1
FROM BURBUJA
WHERE Id
< LEN (@Cadena)
)
SELECT Id
, Letra = SUBSTRING (@Cadena, Id, 1)
FROM BURBUJA
ORDER BY Letra
EJEMPLO 3
WITH CTE
AS
(
SELECT Id = 1
UNION ALL -- EL CÓDIGO DE ARRIBA SE EJECUTA UNA SOLA VEZ, MIENTRAS QUE ABAJO
ES RECURSIVO
SELECT Id + 1
FROM CTE
WHERE Id
< 17
)
-- AQUI ESTÁ EL TRUCO PARA METER ESPACIOS EN UN TIPO DE DATO NUMÉRICO (arriba)
SELECT Id
= REPLICATE(' ', Id) + CONVERT (VARCHAR(20), Id)
FROM CTE
ORDER BY CONVERT(TINYINT,LTRIM(ID))
FACTORIAL
DECLARE @Factorial TINYINT = 5;
WITH Factorial
AS
(
SELECT
Id = 1
,Resultado = 1
UNION ALL
SELECT Id + 1
,Resultado = Resultado * (Id + 1)
FROM Factorial
WHERE Id < @Factorial
)
SELECT *
FROM Factorial
FIBONACCI
DECLARE @Fibonacci TINYINT = 10;
WITH FibonacciCalculation
AS
(
SELECT
Id = 2
,F = 1
,Contador = 1
UNION ALL
SELECT
Id = Id + 1
,F =
Contador
,Resultado = F + Contador
FROM FibonacciCalculation
WHERE Id < @Fibonacci
)
SELECT Id
= 1, Fibonacci = 1 -- para evitar evaluar todos los numeros
UNION ALL
SELECT
Id
,Fibonacci = F
FROM FibonacciCalculation
OPTION (MAXRECURSION 0);
No hay comentarios.:
Publicar un comentario