powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Обновление дерева
3 сообщений из 3, страница 1 из 1
Обновление дерева
    #32017688
Polevi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
День добрый

Есть таблица BalansStruct - ID, Owner, Name, FullName

1 0 Структура Структура
2 1 LUMENE Структура \ LUMENE
3 1 HERBINA Структура \ HERBINA
4 2 Шампунь Структура \ LUMENE \ Шампунь
5 4 100 мл Структура \ LUMENE \ Шампунь \ 100 мл

Необходимо написать триггер, который при изменении названия ветки пересчитает полные пути для ее потомков

Написал ф-ию

CREATE FUNCTION GetFullName(@FromID INT, @ToID INT)
RETURNS Varchar(1000)
AS
BEGIN
DECLARE @TempID INT
DECLARE @Result Varchar(1000)
SET @TempID=@FromID
SET @Result=''
WHILE @TempID<>@ToID AND @TempID<>0
BEGIN
IF @Result<>'' SET @Result=' \ '+@Result
SET @Result=(SELECT Name FROM BalansStruct WHERE ID=@TempID)+@Result
SET @TempID=(SELECT Owner FROM BalansStruct WHERE ID=@TempID)
END
Return(@Result)
END


Написал триггер

CREATE TRIGGER [BalansStruct_U] ON [dbo].[BalansStruct]
FOR UPDATE
AS
UPDATE BalansStruct SET BalansStruct.FullName=dbo.GetFullName(BalansStruct.ID,0)
FROM BalansStruct, INSERTED
WHERE BalansStruct.Owner=INSERTED.ID

Если я меняю LUMENE на L (к примеру), то таблица принимает след вид

1 0 Структура Структура
2 1 LUMENE Структура \ L
3 1 HERBINA Структура \ HERBINA
4 2 Шампунь Структура \ L \ Шампунь
5 4 100 мл Структура \ LUMENE \ Шампунь \ 100 мл - вот эта ветка не обновляется !!!!!!!!!!!!

То есть триггер срабатывает только для прямых потомков.
Почему не срабатывает вложенный триггер ???
...
Рейтинг: 0 / 0
Обновление дерева
    #32017693
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Посмотри в свойствах БД, установлен ли флажок "nested triggers".
2. Триггер написан неправильно. Нет условия выхода из рекурсии. Когда включишь рекурсивные триггеры, он будет приводить к бесконечной рекурсии и вываливаться с ошибкой о нарушении допустимой вложенности рекурсивных вызовов триггера.
...
Рейтинг: 0 / 0
Обновление дерева
    #32017700
Polevi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вложенные триггеры заработали, спасибо
Теперь еще проблема - как проапдейтить поле FullName в той записи, которая была изменена (то есть дети ее изменяются, а она сама - нет)
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Обновление дерева
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]