Создайте составную таблицу из другой таблицы, используя функцию - PullRequest
0 голосов
/ 01 июня 2019

У меня есть функция GetChildren(@id uniqueidentifier), которая возвращает таблицу узлов и таблицу родителей, удаленных из триггера удаления. Я хочу сделать большую таблицу узлов, объединяющую выходные данные GetChildren для каждой строки. Идентификатор удаленного, как мне сделатьтот?Скажите, пожалуйста, как сделать это без переменных и циклов только в чистом sql-way

Я хочу что-то похожее на SelectMany из linq c #

пример:

deleted таблица

+-----+
| Id  |
+-----+
| 111 |
+-----+
| 222 |
+-----+

Nodes таблица

+-----+----------+
| Id  | ParentId |
+-----+----------+
| 111 | ...      |
+-----+----------+
| 222 | ...      |
+-----+----------+
| 333 | ...      |
+-----+----------+
| 444 | 111      |
+-----+----------+
| 555 | null     |
+-----+----------+
| 666 | 222      |
+-----+----------+

GetChildren('111') будет производить:

+-----+
| Id  |
+-----+
| 111 |
+-----+
| 444 |
+-----+

GetChildren('222') будет производить:

+-----+
| Id  |
+-----+
| 222 |
+-----+
| 666 |
+-----+

Я хочу получить таблицу с конкатенацией 2 выше:

+-----+
| Id  |
+-----+
| 111 |
+-----+
| 444 |
+-----+
| 222 |
+-----+
| 666 |
+-----+

Если deleted будет содержать 4 строки, я хочу объединить все 4 вывода GetChildren для каждой строки

1 Ответ

3 голосов
/ 01 июня 2019

Вы можете использовать CROSS APPLY для возврата и объединения нескольких наборов результатов из табличной функции на основе строк из другой таблицы. В вашем примере это будет выглядеть так:

SELECT c.*
FROM deleted d
CROSS APPLY GetChildren(d.Id) c
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...