У меня есть таблица SqlServer2005 «Группа», похожая на следующую:
Id (PK, int)
Name (varchar(50))
ParentId (int)
где ParentId ссылается на другой идентификатор в таблице группы. Это используется для моделирования иерархических групп, таких как:
Group 1 (id = 1, parentid = null)
+--Group 2 (id = 2, parentid = 1)
+--Group 3 (id = 3, parentid = 1)
+--Group 4 (id = 4, parentid = 3)
Group 5 (id = 5, parentid = null)
+--Group 6 (id = 6, parentid = 5)
Вы получаете изображение
У меня есть еще одна таблица, давайте для простоты назовем ее «Данные», которая выглядит примерно так:
Id (PK, int)
Key (varchar)
Value (varchar)
GroupId (FK, int)
Теперь я пытаюсь написать сохраненный процесс, который может дать мне «Данные» для данной группы. Например, если я запрашиваю группу 1, она возвращает мне пары ключ-значение из данных, где groupId = 1. Если я запрашиваю группу 2, она возвращает KVP для groupId = 1, а затем объединяет их с теми, у которых groupId = 2 (и дублированные ключи заменяются).
В идеале, sproc также может корректно завершиться ошибкой, если есть цикл (т. Е. Если родитель группы 1 - группа 2, а родитель группы 2 - группа 1)
Кто-нибудь имел опыт написания такого вздора или знает, как это можно сделать?
Спасибо, ребята, очень признателен,
Alex