Ir para conteúdo
Fórum Script Brasil
  • 0

Recursividade no SQL Server 2000


Ivan Augusto

Pergunta

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

Editado por Ivan Augusto
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,9k
×
×
  • Criar Novo...