|
|
|
Как изменить данные во всех потомках в таблице, завязанной на себя же ??
|
|||
|---|---|---|---|
|
#18+
Есть некая таблица : tab1( id, name, flag, parentid) parentid завязан на эту же таблицу на id. Нужно : При изменении в одной записи поля flag, менять это поле и во всех её потомках. Как это сделать более грамотно и эффективно ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2002, 15:32:51 |
|
||
|
Как изменить данные во всех потомках в таблице, завязанной на себя же ??
|
|||
|---|---|---|---|
|
#18+
если потомков немного - можно триггерами сделать. Только вложенность триггеров может доходить до 32 уровня (кажется). другой вариант - построить в #tmp путь id->parent->parent... а после этого все меняется одним запросом update... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2002, 10:53:00 |
|
||
|
Как изменить данные во всех потомках в таблице, завязанной на себя же ??
|
|||
|---|---|---|---|
|
#18+
Специально для Вас привожу функцию выбирающую дерево: CREATE FUNCTION F_SELECT_ALL_CONST_NODES(@startid int) RETURNS @tmp table (id int, parent int, code varchar(20), lev int) AS BEGIN declare @i int set @i = 0 insert into @tmp select id, parentid, code, 0 from const where id = @startid while @@rowcount > 0 begin set @i = @i + 1 insert into @tmp select o.id, o.parentid, o.code, @i from const o inner join @tmp t on t.lev = @i - 1 and o.parentid = t.id order by lev, o.id end return END далее update Table set field = value ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2002, 10:59:50 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32032461&tid=1822407]: |
0ms |
get settings: |
5ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
162ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
28ms |
get tp. blocked users: |
1ms |
| others: | 205ms |
| total: | 422ms |

| 0 / 0 |
