Рекурсивные CTE - это в первую очередь широта или глубина в SQL Server? - PullRequest
0 голосов
/ 12 октября 2018

У меня есть следующий рекурсивный CTE

WITH relatedpages (custompageid, relatedcustompageid, [level], [path]) AS 
(
    SELECT
        custompageid AS custompageid,
        relatedcontentid AS relatedcustompageid,
        1 AS [level],
        CAST((CAST(custompageid AS VARCHAR) + n' ' + CAST(relatedcontentid AS VARCHAR)) AS VARCHAR) AS [path] 
    FROM
        custompagerelatedcontent related 
    WHERE
        related.custompageid = 1913 

    UNION ALL

    SELECT
        subrelatedpages.relatedcustompageid AS custompageid,
        subrelated.relatedcontentid AS relatedcustompageid,
        subrelatedpages.level + 1 AS [level],
        CAST(subrelatedpages.path + n' ' + CAST(subrelated.relatedcontentid AS VARCHAR) AS VARCHAR) AS [path] 
    FROM
        relatedpages subrelatedpages 
    INNER JOIN
        custompagerelatedcontent subrelated ON subrelatedpages.relatedcustompageid = subrelated.custompageid 
    WHERE
        subrelatedpages.path NOT LIKE n'%' + CAST(subrelated.relatedcontentid AS VARCHAR) + n'%'
)
SELECT
    custompageid,
    relatedcustompageid,
    [level],
    [path] 
FROM
    relatedpages 
ORDER BY
    level

Немного трудно читать, но вот график и таблица результатов

Graph representation

Sql Result

У меня есть графоподобные данные, которые я обрабатываю с помощью столбца path, чтобы избежать циклов .

Но как узнать, выполняет ли SQL Server поиск в ширину или в глубину поиск?

...