Advertisement
Guest User

Untitled

a guest
Jul 20th, 2019
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.03 KB | None | 0 0
  1. USE grnti;
  2. GO
  3. UPDATE cld
  4. SET ParentId = par.Id
  5. FROM [dbo].[Categories] as cld
  6. left join [dbo].[Categories] as par on
  7. ( -- Условия для связей 1-2 уровней
  8. par.Num2 is null and par.Num3 is null and -- Условия для родительских записей
  9. par.Num1 = cld.Num1 and -- Условия совпадения
  10. not cld.Num2 is null and cld.Num3 is null -- Условия для дочерних записей
  11. ) or ( -- Условия для связей 2-3 уровней
  12. not par.Num2 is null and par.Num3 is null and -- Условия для родительских записей
  13. par.Num1 = cld.Num1 and par.Num2 = cld.Num2 and -- Условия совпадения
  14. not cld.Num2 is null and not cld.Num3 is null -- Условия для дочерних записей
  15. );
  16.  
  17. /* Пояснения
  18.  
  19. Существует иерархический справочник вида:
  20.  
  21. Id|Num1|Num2|Num3|Caption
  22. --+----+----+----+--------------------
  23. 1 |01 |null|null|Запись 1-го уровня
  24. 2 |01 |01 |null|Запись 2-го уровня 1
  25. 3 |01 |02 |null|Запись 2-го уровня 2
  26. 4 |01 |02 |01 |Запись 3-го уровня
  27.  
  28. Вышеприведенный скрипт связывает элементы 01.01 (Id = 2) и 01.02 (Id = 3)
  29. с элементом 01 (Id = 1) и элемент 01.02.01 (Id = 4) с 01.02 (Id = 3) через поле
  30. ParentId. После выполнения скрипта вышеприведенная таблица примет следующий вид:
  31.  
  32. Id|ParentId|Num1|Num2|Num3|Caption
  33. --+--------+----+----+----+--------------------
  34. 1 |null |01 |null|null|Запись 1-го уровня
  35. 2 |1 |01 |01 |null|Запись 2-го уровня 1
  36. 3 |1 |01 |02 |null|Запись 2-го уровня 2
  37. 4 |3 |01 |02 |01 |Запись 3-го уровня
  38.  
  39. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement