BrimbaMedlem sedan dec. 19995 875 inlägg Hej!
Låt oss säga att jag har en tabell som ser ut såhär:
id parentID type
1 0 f
7 1 f
8 7 p
13 1 p
Nu vill jag göra en SP där jag skickar in ett id och så plockar den ut antal 'f' som finns ovanför i hierarkin.
Låt oss säga att jag skickar in värde 8 då har den id 7 som förälder, alltså skall den returnera 2 tillslut eftersom id 7 i sin tur har en parent som är id 1. Id 1 däremot har ingen förälder eftersom parentID är 0
Om vi skickar in id 13 så har den parentID 1 och skall då istället returnera 1 förälder av typen f.
Kan man få lite hjälp med detta?
BrimbaMedlem sedan dec. 19995 875 inlägg Jag har börjat lite, men för varje varv returnerar den felmeddelandet:
The 'proc_countP' procedure attempted to return a status of NULL, which is not allowed. A status of 0 will be returned instead.
ALTER PROCEDURE proc_countP
(
@lngID INT
)
AS
BEGIN
DECLARE @i INT
DECLARE @lngParentID INT
DECLARE cursor_a CURSOR LOCAL FOR
SELECT fldParentID
FROM tbl
WHERE fldID = @lngID
OPEN cursor_a
FETCH cursor_a INTO @lngParentID
WHILE @@fetch_status = 0
BEGIN
EXECUTE proc_countP @lngParentID
FETCH cursor_a INTO @lngParentID
set @i = @i + 1
END
CLOSE cursor_a
DEALLOCATE cursor_a
RETURN @i
END
tohaMedlem sedan dec. 1999707 inlägg Jag började lite också... Här får du ut ett resultat från noden uppigenom alla föräldrar och till rooten. Hann inte med mer...
DECLARE @lngID INT
SET @lngID = 78
DECLARE @i INT
CREATE TABLE #t
(
FolderID int,
ParentID int,
Name varchar(50),
Description text,
Type varchar(1)
)
INSERT INTO
#t
SELECT
*
FROM
tblFileAndFolder
WHERE
fldFileAndFolderID = @lngID
SELECT
@i = fldFileAndFolderParentID
FROM
tblFileAndFolder
WHERE
fldFileAndFolderID = @lngID
WHILE @i > 0
BEGIN
INSERT INTO
#t
SELECT
*
FROM
tblFileAndFolder
WHERE
fldFileAndFolderID = @i
SELECT
@i = fldFileAndFolderParentID
FROM
tblFileAndFolder
WHERE
fldFileAndFolderID = @i
END
print @i
select * from #t
DROP TABLE #t
BrimbaMedlem sedan dec. 19995 875 inlägg såhär fick det bli:
ALTER PROCEDURE proc_countFolderParents
(
@lngStart INT,
@retval int output
)
AS
BEGIN
DECLARE @next INT
DECLARE @lvl INT
SET @next=@lngStart
SET @Lvl =0
WHILE @next <>0
BEGIN
SELECT
@next=fldFileAndFolderParentID,
@Lvl = @Lvl + 1
FROM
tblFileAndFolder t
WHERE
@next = fldfileandfolderid
END
set @retval=@lvl