He encontrado este código, pero hay algo que no va bien, pues me devuelve un sólo registro, es como si no entrara en el bucle. La idea es de
aquí
Código:
ALTER PROCEDURE MostrarJerarquia
(
@Root int
)
AS
BEGIN
SET NOCOUNT ON
DECLARE @ID int, @Categoria char(250)
SET @Categoria = (SELECT Categoria FROM CategoriasFAQS WHERE ID = @Root)
SELECT @Categoria AS 'Categoría'
/*PRINT REPLICATE('-', @@NESTLEVEL*4) + @Categoria*/
SET @ID = (SELECT ID FROM CategoriasFAQS WHERE IDSuperior = @Root)
WHILE @ID IS NOT NULL
BEGIN
EXEC MostrarJerarquia @ID
SET @ID = (SELECT MIN(ID) FROM CategoriasFAQS WHERE IDSuperior = @Root AND ID > @ID)
END
END
La tabla de categorías es esta:
ID | Categoria | IDSuperior
-----------------------------
1 | Clientes
2 | Venta
3 | Venta presencial | 2
4 | Venta electrónica | 2
5 | Cuotas | 1
6 | Exenciones | 1
7 | Cursos formación
8 | Ordinaria | 3
9 | Urgente | 3
10 | Ordinaria | 4
11 | Urgente | 4
12 | Anuales | 5
13 | Mensuales | 5
14 | Anuales Tipo A | 12
15 | Anuales Tipo B | 12
Si pongo, por ejemplo, EXEC MostrarJerarquia 10 sólo me devuelve el registro 'Ordinaria' y con EXEC MostrarJerarquia 1 tan sólo 'Clientes'