У меня есть три таблицы SQL Server: Projects
, ProjectTree
, ProjectTreeRec
.Рекурсия в операторе Select для SQL Server
Projects
аналогичны каталогам, и я пытаюсь найти все подкаталоги под каталогом под названием Standard Parts
. Ясно, что здесь требуется рекурсия.
Projects
Таблица содержит следующие столбцы:
ProjectID, Name, Deleted
Таблица ProjectTree
имеет следующие столбцы:
ProjectID, ChildProject
Я не верю, что мне нужно ProjectTreeRec
стол в рамках этих усилий, но содержит колонки ChildProjectID
, ParentProjectID
, Level
.
Я хотел бы разработать рекурсивный оператор выбора, чтобы найти все подкаталоги под каталогом Standard Parts
, которые не были удалены (не 1, а 0).
Я новичок в CTE и рекурсии. Я получаю некоторые результаты, но не то, что мне нужно.
Вот нерекурсивный вызов, который находит меня на первом уровне вниз, но не идет глубже. Он работает нормально.
SELECT
'(Directory Not Available)'
UNION
SELECT DISTINCT
C.[Name]
FROM
[EPDM].[dbo].[Projects] A
JOIN
[EPDM].[dbo].[ProjectTree] B ON B.ProjectID = A.ProjectID
JOIN
[EPDM].[dbo].[Projects] C ON B.childproject = C.projectid
WHERE
A.name = 'Standard Part Library'
AND A.[Deleted] = 0;
Любая помощь приветствуется.
Какая версия сервера SQL вы используете? –
Вы можете проверить его на рекурсивный CTE: http://stackoverflow.com/questions/37973842/get-all-duplicate-data-by-parent-or-child-id-sql-server/37975448#37975448 –
Я использую SQL Server Standard 2014. – CodeWriter