Jump to content
Fórum Script Brasil
  • 0

Recursividade no SQL Server 2000


Ivan Augusto

Question

Olá pessoal, estou com uma dúvida que está me deixando de cabelo em pé :wacko: :wacko: e não estou conseguindo resolver...

Tenho uma tabela x que grava os registros, e os historicos dos registros na mesma tabela, atribuindo o registro anterior, um parent_id... segue um exemplo:

tabela

id | parent_id | nome

1 | null | registro 1

2 | 1 | registro 1

3 | 2 | registro 1

4 | null | registro 2

5 | 4 | registro 2

6 | 3 | registro 1

7 | 5 | registro 2

e eu gostaria de retornar:

path | nome

1,2,3,6 | registro 1

4,5,7 | registro 2

alguém poderia me ajudar a criar uma query ou uma stored procedure/view para o retorno desses valores??!

obrigado desde já a atenção :rolleyes:

abraços

Edited by Ivan Augusto
Link to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 0

Bom dia Ivan,

Recursividade no sql é sempre crítico.... principalmente se você tem uma tabela que possui recursividade infinita.

Mas vamos lá. Criei um exemplo com a tabela que passou. Está bem simples, mas dá para se ter uma idéia de como funciona. Espero que ajude:

-- Criação da temporária
CREATE TABLE #tabela (id INT, parent_id INT, nome VARCHAR(50))

-- Inserção dos dados
insert into #tabela values (1 , null , 'registro 1')
insert into #tabela values (2 , 1 , 'registro 1')
insert into #tabela values (3 , 2 , 'registro 1')
insert into #tabela values (4 , null , 'registro 2')
insert into #tabela values (5 , 4 , 'registro 2')
insert into #tabela values (6 , 3 , 'registro 1')
insert into #tabela values (7 , 5 , 'registro 2')

-- Rodar daqui até o final
DECLARE @Cont AS INT
DECLARE @Proximo INT 
DECLARE @Resultado AS VARCHAR(100)

SET @Resultado = ''
SET @Cont = 1
SET @Proximo = (SELECT parent_id FROM #tabela WHERE id=@Cont)

WHILE @Cont <= (select MAX(id) FROM #tabela)
BEGIN
    WHILE @Proximo IS NOT NULL
    BEGIN
        SET @Resultado = @Resultado + cast(@Proximo AS VARCHAR(2))
        SET @Proximo = (SELECT parent_id FROM #tabela WHERE id=@Proximo)
    END
    SET @Cont = @Cont + 1    
    SET @Proximo = (SELECT id FROM #tabela WHERE id=@Cont)
    SET @Resultado = @Resultado + '|' 
END 

SELECT @Resultado

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...