Как найти все листовые узлы из указанного узла в дереве [duplicate]

Общение с запущенной службой ничем не отличается от методов вызова в любом другом запущенном процессе. Это означает, что вам нужно будет выкопать свои стандартные инструменты для обработки процесса.

Windows Communication Foundation (WCF) будет моим выбором по умолчанию. Вы можете разместить службу WCF в своей службе Windows и выставить ее через конечную точку Named Pipe для эффективной связи.

2
задан marc_s 22 March 2017 в 16:10
поделиться

1 ответ

Рекурсивный cte для спасения ....

Создать и заполнить таблицу образцов (пожалуйста, сохраните нам этот шаг в ваших будущих вопросах):

DECLARE @T as table
(
    id int,
    name varchar(100),
    parent_id int
)

INSERT INTO @T VALUES
(1, 'A', NULL),
(2, 'A.1', 1),
(3, 'A.2', 1),
(4, 'A.1.1', 2),
(5, 'B', NULL),
(6, 'B.1', 5),
(7, 'B.1.1', 6),
(8, 'B.2', 5),
(9, 'A.1.1.1', 4),
(10, 'A.1.1.2', 4)

Cte:

;WITH CTE AS
(
    SELECT id, name, name as path, parent_id
    FROM @T 
    WHERE parent_id IS NULL
    UNION ALL
    SELECT t.id, t.name, cast(cte.path +','+ t.name as varchar(100)), t.parent_id
    FROM @T t
    INNER JOIN CTE ON t.parent_id = CTE.id
)

Запрос:

SELECT id, name, path
FROM CTE

Результаты:

id      name        path
1       A           A
5       B           B
6       B.1         B,B.1
8       B.2         B,B.2
7       B.1.1       B,B.1,B.1.1
2       A.1         A,A.1
3       A.2         A,A.2
4       A.1.1       A,A.1,A.1.1
9       A.1.1.1     A,A.1,A.1.1,A.1.1.1
10      A.1.1.2     A,A.1,A.1.1,A.1.1.2

См. онлайн-демонстрацию в реестре

9
ответ дан Zohar Peled 15 August 2018 в 23:30
поделиться
  • 1
    Должен ли запрос быть SELECT id, name, path FROM CTE? – Mihai Ovidiu Drăgoi 22 March 2017 в 16:20
  • 2
    @ MihaiOvidiuDrăgoi правильно, я немного поиграл с ним и забыл удалить as. теперь исправлено. – Zohar Peled 22 March 2017 в 16:22
  • 3
    @ZoharPeled: потрясающе. Я не ожидал такого полного ответа. В будущем я обязательно буду включать примеры данных. Ниже приведен запрос в действии с некоторыми моими фактическими данными: link – Carel 23 March 2017 в 11:24