Я пытаюсь написать запрос в SQL Server, чтобы извлечь всю информацию, связанную с задачей, но я столкнулся с какой-то проблемой. Я хочу, чтобы это произошло, когда я передаю параметр (@TaskID) и для этого возвращаю информацию о задании для этого идентификатора, а также любую информацию о подзадаче, связанную с этим идентификатором.Рекурсивная функция T-SQL - CTE с ParentID
Проблема в том, что как только вы достигнете первой подзадачи, она эффективно теряет свою связь с общим родительским идентификатором. Например: TaskID (3) в конечном итоге связан с TaskID (1), но поскольку это подзадача TaskID (2), нет возможности проверить, если я не присоединяюсь к родительскому (TaskID 1) к TaskID 2, а затем к TaskID 3
Мы хотели бы иметь бесконечное количество подзадач, но для этого потребуется слишком много объединений.
Мне было интересно, был ли лучший способ?
Структура таблицы или запрос мудрый.
Пример структуры таблицы
WITH cte AS (
SELECT
t.TaskID
,t.Title
,t.ParentID
,CAST(t.TaskID AS NVARCHAR(MAX)) [Path]
FROM
tasks.Tasks t
WHERE
t.TaskID = 3
UNION ALL
SELECT
c.ParentID
,c.Title
,t.ParentID
,c.[Path] + '->' + CAST(t.TaskID AS NVARCHAR(MAX))
FROM
tasks.Tasks t
INNER JOIN cte c on c.ParentID = t.TaskID
)
SELECT
cte.TaskID
,cte.Title
,cte.[Path]
FROM
cte
WHERE
cte.ParentID IS NULL
Это дает правильный результат, но я должен действительно пройти TaskId без ParentID, как это будет верхний уровень. Поэтому вместо t.TaskID = 3 в моем блоке кода я хотел бы передать 1. У меня будет игра ...
Общие табличные выражения являются путь, хотя бесконечное может быть проблема: P Другое наблюдение: TaskType и название является строкой, приведет к большому количеству впустую пространство. Какая версия SQL Server? – UnhandledExcepSean
Возможный дубликат [Sql Hierarchy loop query] (http://stackoverflow.com/questions/18427154/sql-hierarchy-loop-query) – Amit
Это дубликат выше ^^^^^ , но если вы хотите у вас больше 100 циклов, которые нужно добавить ОПЦИЯ (МАКСИРОВАНИЕ 1000) в нижней части CTE –