Bueno, ya está, aunque me ha supuesto una función y dos procedimientos almacenados. Allá va:
Código:
ALTER FUNCTION dbo.FN_IDPadre
(@id int)
RETURNS TABLE
AS
RETURN (SELECT ID FROM clasificaciones WHERE ID = (SELECT IDPadre FROM clasificaciones WHERE ID = @id) )
CREATE PROCEDURE PA_SubirJerarquiaSubProceso
(@id int)
AS
BEGIN
DECLARE @IDPadre int
DECLARE @Nombre char(250)
SET @IDPadre = (SELECT ID FROM clasificaciones WHERE ID = (SELECT ID FROM FN_IDPadre(@id)))
SET @Nombre = (SELECT Nombre FROM clasificaciones WHERE ID = (SELECT ID FROM FN_IDPadre(@id)))
IF @Nombre IS NULL
BEGIN
-- No hay registros
RETURN
END
ELSE
BEGIN
INSERT INTO #tempTabla VALUES (@IDPadre, @Nombre)
EXEC PA_SubirJerarquiaSubProceso @IDPadre
END
END
CREATE PROCEDURE PA_SubirJerarquia
(@id int)
AS
BEGIN
CREATE TABLE #tempTabla (ID int IDENTITY PRIMARY KEY, ColID int, ColNombre char(250))
EXEC PA_SubirJerarquiaSubProceso @id
SELECT ColID as "ID", ColNombre AS "Nombre" FROM #tempTabla ORDER BY ID ASC
END
Bueno, basta con EXEC PA_SubirJerarquia 8, por ejemplo, y te da todos los grupos superiores a los que pertenece el elemento con la categoría 8.
Un saludo.