Ver Mensaje Individual
  #7 (permalink)  
Antiguo 19/01/2006, 04:53
Avatar de Bravenap
Bravenap
 
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 22 años, 2 meses
Puntos: 4
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.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!