SQL me mata. Perdonad por tener varios frentes abiertos. Esto es lo que he hecho. Trabaajo con una .adp de Access sonbre SQL.
Código:
ALTER PROCEDURE PA_SubirJerarquia
(@id int)
AS
BEGIN
DECLARE @IDPadre int
DECLARE @Nombre char(250)
DECLARE @tabla TABLE (ColID int, ColNombre 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)))
INSERT INTO @tabla VALUES (@IDPadre, @Nombre)
IF @Nombre IS NULL
SELECT 'No hay registros'
ELSE
SELECT * FROM @tabla
END
Y la función FN_IDPadre es:
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) )
Sería más fácil con una función escalar pero no me sale. Bueno, el caso es que cuando ejecuto el procedimiento y de parámetro le paso el 8 me dice que se ha ejecutado todo bien pero que no se devuelven resultados (ojo, el condicional no se llega a ejecutar). Sin embargo, con el siguiente código sin procedimientos almacenados sí me devuelve un registro correctamente:
Código:
DECLARE @Nombre char(250)
SET @Nombre =(SELECT Nombre FROM clasificaciones WHERE ID = (SELECT ID FROM FN_IDPadre(8)))
IF @Nombre IS NULL
SELECT 'No pertenece a ningún grupo superior' AS "Nombre"
ELSE
SELECT @Nombre AS "Nombre"
¿no se supone que es lo mismo?