webForumDet fria alternativet

hierarkisk procedur

Webbutveckling

2 svar · 164 visningar · startad av doggelito

Medlem sedan juni 20003 076 inlägg
Frågan#1

hittade på denna:

CREATE PROCEDURE dbo.sp_messages_message 
(@current int) 
as
 SET NOCOUNT ON
 DECLARE @lvl int, @line char(20)

 CREATE TABLE #stack (item char(20), lvl int)
 INSERT INTO #stack VALUES (@current, 1)
 SELECT @lvl = 1
 WHILE @lvl > 0
	BEGIN
	    IF EXISTS (SELECT * FROM #stack WHERE lvl = @lvl)
	        BEGIN
	            SELECT @current = item
	            FROM #stack
	            WHERE lvl = @lvl

	            SELECT @line = space(@lvl - 1) + @current
	            PRINT @line

	            DELETE FROM #stack
	            WHERE lvl = @lvl
	                AND item = @current

	            INSERT #stack
	                SELECT Relationid, @lvl + 1
	                FROM tblMessages
	                WHERE Messageid = @current

	            IF @@ROWCOUNT > 0
                        SELECT @lvl = @lvl + 1
        END

    ELSE
        SELECT @lvl = @lvl - 1
END -- WHILE

GO

men hur använder jag resultatet?
nu printar den ut alla Messageid (PRINT @line), kan man fånga upp dessa och köra en:

select * from tblMessages
where Messageid In (#stack)
Medlem sedan dec. 200012 464 inlägg
#2

I stället för print kan du göra insert i en tabell (t) och sedan

select * from tblMessages
where Messageid In (select messageid from t)

Medlem sedan juni 20003 076 inlägg
#3

Javisst! :bire

257 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)