none
CTE RRS feed

  • Pergunta

  • ALGUEM PODE ME EXPLICAR ESSA CTE POR FAVOR.
    CREATE TABLE tbMenu
      (
      id INT NOT NULL IDENTITY(1,1) PRIMARY KEY, 
      idPai INT NULL, 
      Nome VARCHAR(30) NOT NULL
      )
    
    INSERT tbMenu (idPai,Nome) VALUES 
    (NULL,'Menu'),(1,'Vestuario'),(1,'Brinquedo'),(1,'Informatica'),
    (2,'Terno'),(2,'Casaco'),(2,'Sapato'),(2,'Meia'),(3,'Carrinho'),
    (3,'Boneca'),(4,'Netbook'),(4,'Webcam'),(4,'Desktop')
    
    
    
    WITH cteMenuNivel(id,Nome,Nivel,NomeCompleto)
    AS
    (
      -- Ancora
      SELECT id,Nome,1 AS 'Nivel',CAST(Nome AS VARCHAR(255)) AS 'NomeCompleto' 
      FROM tbMenu WHERE idPai IS NULL
      
      UNION ALL
      
      -- Parte RECURSIVA
      SELECT 
        m.id,m.Nome,c.Nivel + 1 AS 'Nivel',
        CAST((c.NomeCompleto + '/' + m.Nome) AS VARCHAR(255)) 'NomeCompleto' 
      FROM tbMenu m INNER JOIN cteMenuNivel c ON m.idPai = c.id
      
    )
    SELECT Nivel,NomeCompleto FROM cteMenuNivel
    sexta-feira, 4 de fevereiro de 2011 02:51

Respostas

  • Sergio,

     

    Essa ai é uma tabela de memoria recursiva, ou Recursive CTE, da uma olhada neste link do BOL aqui em baixo que tem uma explicação.

    ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.en/tsqlref9/html/27cfb819-3e8d-4274-8bbe-cbbe4d9c2e23.htm


    ---------------------------------------------- Para dicas SQL Server e mais -> www.onlywhatmatters.wordpress.com
    • Sugerido como Resposta Eder Costa quinta-feira, 10 de fevereiro de 2011 11:45
    • Marcado como Resposta Eder Costa segunda-feira, 14 de fevereiro de 2011 17:03
    sexta-feira, 4 de fevereiro de 2011 10:07
    Moderador
  • Sergio

    Como o amigo Caputofa comento esta é uma CTE Recursiva, no seu exemplo a cte recursiva foi utilizada para montar uma árvore de menu...

    Este script possívelmente foi extraido do Blog do Catae, dá uma lida lá ele da uma explicação bem detalhada sobre o assunto...

    http://blogs.msdn.com/b/fcatae/archive/2010/11/10/query-recursiva.aspx

    Att.
    Marcelo Fernandes


    MCP, MCDBA, MCSA, MCTS.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba

    • Sugerido como Resposta Eder Costa quinta-feira, 10 de fevereiro de 2011 11:45
    • Marcado como Resposta Eder Costa segunda-feira, 14 de fevereiro de 2011 17:03
    sexta-feira, 4 de fevereiro de 2011 11:08
    Moderador

Todas as Respostas

  • Sergio,

     

    Essa ai é uma tabela de memoria recursiva, ou Recursive CTE, da uma olhada neste link do BOL aqui em baixo que tem uma explicação.

    ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.en/tsqlref9/html/27cfb819-3e8d-4274-8bbe-cbbe4d9c2e23.htm


    ---------------------------------------------- Para dicas SQL Server e mais -> www.onlywhatmatters.wordpress.com
    • Sugerido como Resposta Eder Costa quinta-feira, 10 de fevereiro de 2011 11:45
    • Marcado como Resposta Eder Costa segunda-feira, 14 de fevereiro de 2011 17:03
    sexta-feira, 4 de fevereiro de 2011 10:07
    Moderador
  • Sergio

    Como o amigo Caputofa comento esta é uma CTE Recursiva, no seu exemplo a cte recursiva foi utilizada para montar uma árvore de menu...

    Este script possívelmente foi extraido do Blog do Catae, dá uma lida lá ele da uma explicação bem detalhada sobre o assunto...

    http://blogs.msdn.com/b/fcatae/archive/2010/11/10/query-recursiva.aspx

    Att.
    Marcelo Fernandes


    MCP, MCDBA, MCSA, MCTS.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba

    • Sugerido como Resposta Eder Costa quinta-feira, 10 de fevereiro de 2011 11:45
    • Marcado como Resposta Eder Costa segunda-feira, 14 de fevereiro de 2011 17:03
    sexta-feira, 4 de fevereiro de 2011 11:08
    Moderador
  • Olá Sergio!

    Houve algum progresso? Os link´s lhe foram úteis?

    att;

     


    Eder Costa - LATAM Forum Support Engineer
    Microsoft Corporation
    quinta-feira, 10 de fevereiro de 2011 11:47
  • Olá Eder Costa,

    Sim perfeitos!

    sexta-feira, 13 de julho de 2012 19:41