Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- USE grnti;
- GO
- UPDATE cld
- SET ParentId = par.Id
- FROM [dbo].[Categories] as cld
- left join [dbo].[Categories] as par on
- ( -- Условия для связей 1-2 уровней
- par.Num2 is null and par.Num3 is null and -- Условия для родительских записей
- par.Num1 = cld.Num1 and -- Условия совпадения
- not cld.Num2 is null and cld.Num3 is null -- Условия для дочерних записей
- ) or ( -- Условия для связей 2-3 уровней
- not par.Num2 is null and par.Num3 is null and -- Условия для родительских записей
- par.Num1 = cld.Num1 and par.Num2 = cld.Num2 and -- Условия совпадения
- not cld.Num2 is null and not cld.Num3 is null -- Условия для дочерних записей
- );
- /* Пояснения
- Существует иерархический справочник вида:
- Id|Num1|Num2|Num3|Caption
- --+----+----+----+--------------------
- 1 |01 |null|null|Запись 1-го уровня
- 2 |01 |01 |null|Запись 2-го уровня 1
- 3 |01 |02 |null|Запись 2-го уровня 2
- 4 |01 |02 |01 |Запись 3-го уровня
- Вышеприведенный скрипт связывает элементы 01.01 (Id = 2) и 01.02 (Id = 3)
- с элементом 01 (Id = 1) и элемент 01.02.01 (Id = 4) с 01.02 (Id = 3) через поле
- ParentId. После выполнения скрипта вышеприведенная таблица примет следующий вид:
- Id|ParentId|Num1|Num2|Num3|Caption
- --+--------+----+----+----+--------------------
- 1 |null |01 |null|null|Запись 1-го уровня
- 2 |1 |01 |01 |null|Запись 2-го уровня 1
- 3 |1 |01 |02 |null|Запись 2-го уровня 2
- 4 |3 |01 |02 |01 |Запись 3-го уровня
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement