SQL-разработчики, у меня есть плохо спланированная база данных как задача, чтобы много узнать о SQL Server 2012.
SO, есть таблица Elem
:
+-----------+----+---+----------+------------+
|VERSION(PK)|NAME|KEY|PARENT_KEY|DIST_KEY(FK)|
+-----------+----+---+----------+------------+
|1 |a |12 |NULL |1 |
+-----------+----+---+----------+------------+
|2 |b |13 |12 |1 |
+-----------+----+---+----------+------------+
|3 |c |14 |13 |1 |
+-----------+----+---+----------+------------+
|4 |d |15 |12 |1 |
+-----------+----+---+----------+------------+
|5 |e |16 |NULL |1 |
+-----------+----+---+----------+------------+
|6 |e |17 |NULL |2 |
+-----------+----+---+----------+------------+
После обновления строки мне нужно проверить родительский ключ элемента, чтобы он не позволял элементу быть самоучка или что-то в этом роде.
И когда я удаляю строку, мне нужно удалить все дочерние и дочерние элементы детей и т.д.
Вопросы:
-
Как я могу выбрать все "родитель + бабушка и т.д." одного элемента DIST?
-
Как я могу выбрать всех "сыновей + внуков + и т.д." одного элемента DIST?
Я читал о решениях с CTE, но у меня нет корня элементов, и я даже не могу понять, как я могу использовать CTE.
Пожалуйста, помогите!
Спасибо.