es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo recrear una salida de múltiples niveles padre-hijo en SQL Server

Tengo esta tabla SQL Server:

[1]

Quiero ejecutar una consulta que devuelva esta salida:

[2]

Intenté usar el código de:

https://stackoverflow.com/questions/51172884/multi-level-parent-child-relationship

WITH CTE AS 
(
    SELECT A.[Value], A.[ValueID], 1 AS [Level]
    FROM [dbo].[MyTable] AS A
    WHERE A.ParentValueID = 0

    UNION ALL

    SELECT CTE.[Value], CTE.[ValueID], Level + 1 
    FROM CTE 
    INNER JOIN [dbo].[MyTable] AS B ON CTE.[ValueID] = B.[ValueID]
)
SELECT * FROM CTE

Eso no pareció funcionar, ya que obtuve un error:

La declaración terminó. La recursión máxima de 100 se ha agotado antes de completar la declaración.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Solución

    Basándonos en el mensaje de error, parece que la consulta alcanzó el límite de 100 niveles de recursión. Para solucionar este problema, necesitamos agregar una opción a la consulta que incremente el nivel máximo de recursión.

    Podemos modificar el código original para agregar OPTION (MAXRECURSION 0) al final de la consulta, lo que eliminará cualquier límite en el nivel de recursión:

    WITH CTE AS 
    (
        SELECT A.[Value], A.[ValueID], 1 AS [Level]
        FROM [dbo].[MyTable] AS A
        WHERE A.ParentValueID = 0
    
        UNION ALL
    
        SELECT CTE.[Value] + ' -> ' + B.[Value], B.[ValueID], Level + 1 
        FROM CTE 
        INNER JOIN [dbo].[MyTable] AS B ON CTE.[ValueID] = B.[ParentValueID]
    )
    SELECT [Value], [Level] FROM CTE
    OPTION (MAXRECURSION 0)
    

    Esta consulta modificada devolverá el resultado esperado:

    [![2]][2]

    Nótese que también modificamos el segundo comando select para concatenar los valores padre e hijo con un símbolo de flecha (->). Esto nos ayudará a diferenciar los diferentes niveles de la jerarquía.

    En general, la clave para solucionar este problema es entender las limitaciones de la consulta CTE y cómo modificarla para superarlas.

Comments are closed.