nSec = SECONDS() CREATE CURSOR RECURSIVE (ID I , ID_PARENT I NULL) INSERT INTO RECURSIVE VALUES (1,NULL) INSERT INTO RECURSIVE VALUES (2,NULL) INSERT INTO RECURSIVE VALUES (3,2) INSERT INTO RECURSIVE VALUES (4,1) INSERT INTO RECURSIVE VALUES (5,2) INSERT INTO RECURSIVE VALUES (6,3) INSERT INTO RECURSIVE VALUES (7,5) INSERT INTO RECURSIVE VALUES (8,6) INSERT INTO RECURSIVE VALUES (9,8) INDEX ON ID TAG ID CLEAR nBoss = 9 FOR nT = 1 TO 10000 SEEK nBoss DO WHILE SEEK(id_parent) AND !ISNULL(id_parent) ENDDO ENDFOR nTime = SECONDS() - nSec ? nTime, IDIn SQL:
CREATE TABLE #RECURSIVE (ID INT PRIMARY KEY, ID_PARENT INT NULL) INSERT INTO #RECURSIVE VALUES (1,NULL) INSERT INTO #RECURSIVE VALUES (2,NULL) INSERT INTO #RECURSIVE VALUES (3,2) INSERT INTO #RECURSIVE VALUES (4,1) INSERT INTO #RECURSIVE VALUES (5,2) INSERT INTO #RECURSIVE VALUES (6,3) INSERT INTO #RECURSIVE VALUES (7,5) INSERT INTO #RECURSIVE VALUES (8,6) INSERT INTO #RECURSIVE VALUES (9,8) DECLARE @nT int DECLARE @idBoss INT SET @nT = 1 WHILE @nT < 10000 BEGIN SET @idBoss = 9 WHILE @@ROWCOUNT = 1 SELECT @idBoss = ID_PARENT FROM #RECURSIVE WHERE ID=@idBoss AND ID_PARENT IS NOT NULL SET @nT = @nT + 1 END SELECT @idBoss DROP TABLE #RECURSIVEDo your math..
>CREATE TABLE #RECURSIVE (ID INT PRIMARY KEY, ID_PARENT INT NULL) >INSERT INTO #RECURSIVE VALUES (1,NULL) >INSERT INTO #RECURSIVE VALUES (2,NULL) >INSERT INTO #RECURSIVE VALUES (3,1) >INSERT INTO #RECURSIVE VALUES (4,1) >INSERT INTO #RECURSIVE VALUES (5,2) >INSERT INTO #RECURSIVE VALUES (6,3) >INSERT INTO #RECURSIVE VALUES (7,5) >INSERT INTO #RECURSIVE VALUES (8,6) >INSERT INTO #RECURSIVE VALUES (9,8) > >-- FIND BOSS >DECLARE @idBoss INT >SELECT @idBoss = 9 >WHILE @@ROWCOUNT = 1 > SELECT @idBoss = ID_PARENT > FROM #RECURSIVE WHERE ID=@idBoss AND ID_PARENT IS NOT NULL > >SELECT @idBoss >-- END FIND > >DROP TABLE #RECURSIVE >>